Factory Method pattern里product的类型放在factory里好还是放在product里好

wang_zheng_wz 2004-03-24 02:46:22
如以下代码

public class TreeFactory {
public static final int COMMON_DWTREE = 1;
public static final int GNBZ_DWTREE = 2;

...

public Tree newTree(int treeType) {
switch (treeType) {
case COMMON_DWTREE :
return new DwTree3();

case GNBZ_DWTREE :
return new DwTree4();

...

default :
return null;
}
}
}

调用代码
TreeFactory tf = new TreeFactory();
Tree tree = tf.newTree(TreeFactory.COMMON_DWTREE);



但COMMON_DWTREE和GNBZ_DWTREE似乎也可以放在类Tree中,如下
public class TreeFactory {
public Tree newTree(int treeType) {
switch (treeType) {
case Tree.COMMON_DWTREE :
return new DwTree3();

case Tree.GNBZ_DWTREE :
return new DwTree4();

...

default :
return null;
}
}
}



调用代码
TreeFactory tf = new TreeFactory();
Tree tree = tf.newTree(Tree.COMMON_DWTREE);


我看的书上用的是第一种,不知道两种方法哪种好些,还是没什么差别

初涉design pattern理论,请多帮忙
...全文
30 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_zheng_wz 2004-03-25
  • 打赏
  • 举报
回复
up
yoken 2004-03-25
  • 打赏
  • 举报
回复
bluesage(海蓝色)的观点我觉得比较正确
cooldoghuang(一只喝咖啡的狗) ,Tree要加子类,不修改Tree类就要修改TreeFactory类,修改是免不了的,不过还是谢谢
至于java.util.Calendar,由于有如下用法,我觉得挺帅,还有java.awt.Event,觉得好像有什么模式似的,题外话,无所谓了
Calendar c = new Calendar();
c.setTime(yourDate);
System.out.println(c.get(Calendar.YEAR));

cooldoghuang 2004-03-25
  • 打赏
  • 举报
回复
不应该放在Tree中,因为Tree不知道以后将会有哪些子类。
如果放在Tree中,以后你加一个子类,就要修改一次Tree类了,这显然是不对的。

public static final int properties -- 不是什么模式吧,只是定义常量而已啊

wang_zheng_wz 2004-03-25
  • 打赏
  • 举报
回复
java.util.Calendar中的public static final int properties好像不是用于Factory pattern,那么它属于什么pattern呢
bluesage 2004-03-25
  • 打赏
  • 举报
回复
不应该放在TREE类中,判断逻辑放在TreeFactory 中,设计模式讲封装变化,工厂模式就是封装了对象生成的细节,而具体类不应该关心自己是如何被调用的,而且DwTree4、DwTree3继承自Tree

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧