工厂模式不明,望高手指点

blasterboy 2004-04-06 10:21:11
1:简单工厂
public interface A{};
public calss A1 implement A{....};
public calss A2 implement A{....};
public calss A3 implement A{....};

public class factor{
private factor(){};
public static A factor(int arug){
if(arug == 1){
return new A1();
} else if (arug == 2){
return new A2();
} else {
return new A3();
}
}

class factor是一个简单工厂,那么
public class factor{
private factor(){};
public static A factor1(){
return new A1();
}
public static A factor2(){
return new A2();
}
public static A factor3(){
return new A3();
}
}
是不是一个简单工厂方法呢?
...全文
51 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeffyan77 2004-04-12
  • 打赏
  • 举报
回复
大家好。

首先,factory是工厂,factor不是工厂。

关于第一个问题,所谓简单工厂模式的标志就是静态工厂方法。如果你看到了静态工厂方法,就可以肯定涉及了简单工厂模式

关于第二个问题,这种合并不好。理由如下:

首先不能很好处理需求的变化,也就是“OCP”。为什么这么说呢?如果你是用两个静态工厂方法,那么日后出现了需要第三个工厂方法的情况,你只需要把这个静态工厂加进去就可以了,对已有的其他代码不必修改。如果你合并了它们,你就需要修改这个大工厂方法,代码修改必然造成测试的麻烦。

其次,合并这两种工厂方法造成使用端的困惑。使用端必须进行乡下类型转换,而向下类型转换是危险的。
lodestar51 2004-04-08
  • 打赏
  • 举报
回复
学习.........
bluesage 2004-04-07
  • 打赏
  • 举报
回复
你提供了三个factor方法,用户就必须知道该调用那个方法获得对象,而工厂方法只提供一个factor方法,但是可以返回不同的对象
kl582 2004-04-07
  • 打赏
  • 举报
回复
不用客气
blasterboy 2004-04-06
  • 打赏
  • 举报
回复
2抽象工厂中,
public class factor{
public A creatA(){
return new A();
}
public B creatB(){
return new B();
}

可不可以用个简单工厂代替?
public class factor{
public static object creat(String arg){
if (arg.equals("A"){
return new A();
} else{
return new B();
}
}

自己觉得好像不可以,因为返回类型不得不为Object,这样好像没有什么太大意义。
blasterboy 2004-04-06
  • 打赏
  • 举报
回复
kl582(空) 谢谢:)
kl582 2004-04-06
  • 打赏
  • 举报
回复
(1)后面的不是简单工厂,工厂返回的是抽象类型,你知道工厂造了什么类型的产品,但是不知道他具体是A1,A2还是A3(根据你的参数决定)。简单工厂的工厂实际并不存在,所以用Static方法。简单工厂是把类要做的拿到工厂里做。

2。抽象的工厂模式是把工厂在抽象一次,把本来由一个工厂做的,分给自己下属的几个厂做,当然它就成了公司。当公司业绩不好的时候,萎缩了,大公司就变成了小厂,自己的产品自己做。抽象工厂退化的时候,就可以由简单工厂来代替。但是简单工厂毕竟是小厂,做不了打公司的事。
sean_gao 2004-04-06
  • 打赏
  • 举报
回复
个人觉得这样的概念文章意义不大:是简单工厂怎么样?不是又怎么样?

第一个问题:单就工厂的作用看,是工厂,不过没什么意义,跟调用构造方法没什么区别,对吧?

第二个问题:都返回object当然也可以,同样没有太大的意义,每次得到的还需要显式强制转换,另外由于object太抽象,多态几乎就用不上。
blasterboy 2004-04-06
  • 打赏
  • 举报
回复
hehe,名字无所谓了,只要明白意思就好了,我现在就是不太明白意思:(
sean_gao 2004-04-06
  • 打赏
  • 举报
回复
你的factor类里面有个叫factor的方法,这个不好吧?构造方法才和类名一样。换个名字。
blasterboy 2004-04-06
  • 打赏
  • 举报
回复
顶,怎么没人理我:(

50,523

社区成员

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

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