以下代码是小弟从JForum论坛代码中抽象提取出来的(与JForumExecutionContext相关的)。
[code="java"]
public class Person{
private string name;
private static HashMap<String,Person> hm=new HashMap<String ,Person>();
public void setName(String name){this.name=name;}
public static Person getPerson(){
Person p=hm.get("p1");
if(p==null){
p=new Person();
hm.put("p1",p);
}
return p;
}
public static void setPerson(Person p){hm.put("p1",p);}
}
[/code]
[code="java"]
public class Test{
public static void main(String []args){
Person p=Person.getPerson();
p.setName("Jack");
p.setPerson(p);
}
}
[/code]
小弟一直迷惑的是Test类中,为什么还要加入p.setPerson(p);这一行代码,个人认为这行代码多此一举。如果必须要有p.setPerson(p);这行代码,原作者为什么要这样写,是不是用了什么设计模式?请高手明示,感激涕零!!! :D
以后再Person p=Person.getPerson(); 这样,取出Person对象,name的值是空的。
刚才不知道怎么就提交了。
再给出一个单例的写法,个人觉得这样好一些。
[code="java"]public class Person {
private String name;
private static Person _instance = null;
public void setName(String name) {
this.name = name;
}
private Person() {
}
public static Person getPerson() {
if (_instance == null) {
_instance = new Person();
}
return _instance;
}
}[/code]
单例模式的一种写法。最后一行是为了保证你的对象变化了。
要不然,你p.setName("Jack"); 这一行代码执行过。
以后再Person p=Person.getPerson(); 这样,取出Person对
你给出的那个例子,它没有限制构造方法。
还是可以用默认的构造方法创建实例。