站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题初看设计模式-工厂模式的一些疑惑

初看设计模式-工厂模式的一些疑惑

摘要: 初看设计模式-工厂模式的一些疑惑


1.在加入新类时,客户端是不用变化的,但是我没搞明白不修改代码又怎么能使用新的类呢?最少要把代码加进去吧?
2.可以使客户端不知道声明的类是什么?那你连你自己要调用哪个类都不知道,那可能吗?而且你不知道是哪个类你调它干嘛?肯定知道有什么用才调啊

3.不是说看代码就能知道程序的意思吗?那用了工厂模式,我根本就看不见我新建的实例是苹果还是西瓜还是香蕉,只知道是水果,那他要显示颜色是绿色,我看结果或程序连我到底调的那个类都不知道了?那不是还很不清晰啊?

我知道我说的肯定是有问题的,所以想请大家解惑,非常感谢!


1、配置文件里配
2、3、要的奏是这种效果,只管用怎么实现不用去关心


顶!!!


第一个我也曾想到用配置文件
还有说这样使用可以使构造函数不复杂,把构造函数里面的代码分开?但是好象没特别说明这个啊,怎么看都觉着和直接声明差距不是很大,哪位有点详细的事例说说到底好在哪呢?


2.可以使客户端不知道声明的类是什么?那你连你自己要调用哪个类都不知道,那可能吗?而且你不知道是哪个类你调它干嘛?肯定知道有什么用才调啊

应该这样理解:客户端不用像传统的方法那样import具体的类,而可以通过类的名称直接得到需要的类,这样你可以把类的名称写在例如配置文件里面,以后系统需要扩充的时候,就可以只要修改配置文件,而不用去修改客户端的类。


工厂方法是对每个产品实例都要有创建的对应的类,那也就是说你辨别每个具体的产品类改为了辨别具体的工厂创建的实例类,那这个效果不是一样,反而是多了中间一道吗?

fruit a=new apple();
fruit b=new orange();
改为:
fruit a=concreteCretor1.factor()
fruit a=concreteCretor2.factor()

一样得知道concreteCretor1=apple,concreteCretor2=orange,这个首先我觉得客户是需要知道具体类是什么的,不然不知道调哪个,其次,当加入新类时,客户端不是下面这样的吗?简单工厂模式还能说在配置里加,但工厂方法又怎么去配置?

fruit c=new grape();这个和下面有什么区别?

fruit a=concreteCretor3.factor()


mark!


1. 工厂的更换,是通过要配置文件的配置的。
2. 配置的写法是有一定的规则的。一般是写类的全名,带包名一起。用途是反射,LZ反射要是都没搞明白那么工厂模式是肯定理解的不透彻的。
3. 一般都有默认的工厂,如果你选择生产苹果,那么先要配置好苹果,set苹果,如果要香蕉当然要先set香蕉。这也是为什么一般工厂模式中产生工厂都会有两个方法,一个是没有参数的,一个是传String的。



↑返回目录
前一篇: 请问hibernate如何映射双主键?在线等
后一篇: struts中如何给form表单起个名字