多例模式的特点
1)多例类可以有多个实例;
2)必须自行创建;
3)向外界提供自己的实例;
有上限多例模式
无上限多例模式
有状态: Mutable Multiton
无状态: Immutable Multiton
多例模式使用的时候应该注意,不是提供一个对外的
接口,然后无限的new,无限new的,那是静态工厂方法。多例模式侧重存在的对象,就不new,或者是拿新的对象替换掉他。进而提高性能,在并发的情况下,还要考虑
同步问题。下面是一个示例代码。
package CreationalPattern.Multiton;
import java.util.HashMap;
public class TestMultition {
public static void main(String[] args){
MyClass m1 = MyClass.getInstance("m1");
m1.setName("phl");
MyClass m2 = MyClass.getInstance("m2");
MyClass m3 = MyClass.getInstance("m1");
System.out.println(m1.getName());
System.out.println(m2.getName());
System.out.println(m3.getName());
}
}
class MyClass{
private static HashMap<String,MyClass> hm = new HashMap<String,MyClass>();
private String name ;
private MyClass(){
}
private MyClass(String name){
this.name = name;
}
//直接覆盖存在的类
public static MyClass getInstance(String name){
if(name != null && !"".equals(name)){
hm.put(name, new MyClass(name));
}
return hm.get(name);
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}