锁定老帖子 主题:女友多的好处 (简单工厂模式)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (17)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-05
最后修改:2009-12-06
java 的switch 语句的case 匹配为什么不能像delphi一样 支持String类型 哦
这里可以通过反射的话效果更佳
// 女友工厂 public class DreamGirlCreatFactory { public static DreamGirl creatDreamGirl(String girlName){ if(girlName.equals("BeautifulGirl")){ return new BeautifulGirl(); }else if(girlName.equals("LivelyGirl")){ return new LivelyGirl(); } else if(girlName.equals("LooksMediocreGirl")){ return new LooksMediocreGirl(); }else if(girlName.equals("SensibleGirl")){ return new SensibleGirl(); } return null; } public static void main(String[] args){ String girlName1 = "BeautifulGirl"; String girlName2 = "LivelyGirl"; String girlName3 = "LooksMediocreGirl"; String girlName4 = "SensibleGirl"; String[] girlName = new String[4]; girlName[0]=girlName1; girlName[1]=girlName2; girlName[2]=girlName3; girlName[3]=girlName4; for(int i=0; i<4;i++){ DreamGirl girl = DreamGirlCreatFactory.creatDreamGirl( girlName[i]); girl.can_do_something_for_boy(); } } }
下面是创建的对象的 接口 //基类 public class DreamGirl { public void can_do_something_for_boy(){ } } 下面都是具体实现
public class BeautifulGirl extends DreamGirl { public void can_do_something_for_boy() { System.out.println("陪老公逛街!!!"); } }
public class LivelyGirl extends DreamGirl { public void can_do_something_for_boy() { System.out.println("陪老公聊天!!!"); } }
public class LooksMediocreGirl extends DreamGirl { public void can_do_something_for_boy() { System.out.println("给老公做饭!!!"); } }
public class SensibleGirl extends DreamGirl { public void can_do_something_for_boy() { System.out.println("给老公洗衣服!!!"); } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-06
enum 还不够吗
|
|
返回顶楼 | |
发表时间:2009-12-06
Java7就支持String作为Case了。
|
|
返回顶楼 | |
发表时间:2009-12-07
根据ls们总结
1.lz的例子更适合enum。 2.现在string可以作为case了。 |
|
返回顶楼 | |
发表时间:2009-12-07
最后修改:2009-12-07
建议LZ将每种类型的美女,再放到一个小的简单工厂里,然后把这些小工厂放到一个final的HashMap里,通过多态的方式处理,直接舍弃switch就行了。简单工厂如:
//接口: public interface GirlFactory{ DreamGirl creatDreamGirl(); } public class BeautifulGirlFactory implements GirlFactory{ public DreamGirl creatDreamGirl(){ return new BeautifulGirl(); } } 然后在DreamGirlCreatFactory 里放一个HashMap: private final Map map = new HashMap(){ { put("BeautifulGirl",new BeautifulGirlFactory()); } }; 其他的美女跟这个类似,在使用时改为: public static DreamGirl creatDreamGirl(String girlName){ return map.get(girlName).creatDreamGirl();//可以做一些额外处理,在此简化 } 看起来感觉更好一些,只是比较复杂。。。 |
|
返回顶楼 | |
发表时间:2009-12-07
hankesi2000 写道 建议LZ将每种类型的美女,再放到一个小的简单工厂里,然后把这些小工厂放到一个final的HashMap里,通过多态的方式处理,直接舍弃switch就行了。简单工厂如:
//接口: public interface GirlFactory{ DreamGirl creatDreamGirl(); } public class BeautifulGirlFactory implements GirlFactory{ public DreamGirl creatDreamGirl(){ return new BeautifulGirl(); } } 然后在DreamGirlCreatFactory 里放一个HashMap: private final Map map = new HashMap(){ { put("BeautifulGirl",new BeautifulGirlFactory()); } }; 其他的美女跟这个类似,在使用时改为: public static DreamGirl creatDreamGirl(String girlName){ return map.get(girlName).creatDreamGirl();//可以做一些额外处理,在此简化 } 看起来感觉更好一些,只是比较复杂。。。 这个应该就是抽象工厂模式了 |
|
返回顶楼 | |
发表时间:2009-12-07
lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出
|
|
返回顶楼 | |
发表时间:2009-12-07
wangdgsc 写道 lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出
这是简单工厂啦,你的要求应该是hankesi2000写到的抽象工厂方法嘿嘿 |
|
返回顶楼 | |
发表时间:2009-12-08
意义何在? 解决了什么问题? 要添加新女友还必须修改factory....而且像其他人提出的那样,用string作这个是非常不好的。 要用enum. 可以参看effective java 1st/2nd edition.
不是用Pattern就好阿。。 |
|
返回顶楼 | |
发表时间:2009-12-08
wangdgsc 写道 lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出
这时候是不是可以考虑建立一个 girl池啊 |
|
返回顶楼 | |