论坛首页 Java企业应用论坛

工厂模式的简单理解

浏览 12009 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-01  

 

工厂模式的简单理解

简单工厂模式

首先,如果一个客户要用到一款手机,一般的做法是客户去创建一款手机,然后拿来用:

image 

这时,客户需要知道怎么去创建一款手机,客户和手机就紧密耦合在一起了.为了降低耦合,就出现了工厂类,把创建手机的操作放到了工厂里面去,客户直接使用工厂的创建手机方法,传入想要的手机型号就行了,而不必去知道创建的细节.

image

工厂方法模式

随着手机种类越来越多,简单工厂模式出现了弊端,每次新加入手机品种,工厂类都要加入新的创建逻辑.这时我们就可以把工厂类定义成了接口,而每增加一种新的手机,就增加该手机对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码:

image

抽象工厂模式

随着工厂规模的继续扩大,工厂开始生产充电器了.这时候工厂有二个系列的产品:手机和充电器.而手机必须使用对应的充电器才能使用.这时候分别使用一个手机工厂和一个充电器工厂都不能满足我们的需求,我们必须确认手机跟充电器的对应关系.我们把工厂改造一下,把手机工厂跟充电器工厂联系在一起:

image

 

设计模式初学者,欢迎指点...

 

 

   发表时间:2010-04-01  
factory关键的一点是object的生成由一个中间对象(工厂)来负责,简单工厂和抽象工厂的区别关键在于工厂是负责单一对象的生成还是一组有关联的对象的生成
0 请登录后投票
   发表时间:2010-04-01   最后修改:2010-04-01
iooyoo 写道
factory关键的一点是object的生成由一个中间对象(工厂)来负责,简单工厂和抽象工厂的区别关键在于工厂是负责单一对象的生成还是一组有关联的对象的生成


工作2年多去面试,给人问观察者模式,不懂,,,,
惭愧啊,决定看看设计模式...唉
0 请登录后投票
   发表时间:2010-04-02  
呵呵,其实看看写源代码,在看看哪些设计模式,实际上就是面向对象的方法和策略了,然后再回过头看看c,对象还是过程该怎么区别应用就有体会了
0 请登录后投票
   发表时间:2010-04-03  
LZ的画的很好,解释的也很详细,如能附上示例代码就更好了
0 请登录后投票
   发表时间:2010-04-04  
“客户需要知道怎么去创建一款手机,客户和手机就紧密耦合在一起了.为了降低耦合”

请问,这时,客户和手机是解耦了,但是,难道你没发现这时手机却和工厂之间又存在耦合了?
0 请登录后投票
   发表时间:2010-04-06  
XTU_xiaoxin 写道
“客户需要知道怎么去创建一款手机,客户和手机就紧密耦合在一起了.为了降低耦合”

请问,这时,客户和手机是解耦了,但是,难道你没发现这时手机却和工厂之间又存在耦合了?


耦合不可能完全没有,只能尽量降低.
跟多款手机耦合总比跟一个工厂耦合好点吧...
0 请登录后投票
   发表时间:2010-04-06  
bryande 写道
LZ的画的很好,解释的也很详细,如能附上示例代码就更好了

代码就没贴了,网上有一大把..呵呵
0 请登录后投票
   发表时间:2011-03-16  
对于我这个初学者很有用啊,编了半天的码,其实设计才是最重要的。只有设计好了,后面的工作就容易做了。
0 请登录后投票
   发表时间:2011-03-16  
topbby 写道

 

工厂模式的简单理解

简单工厂模式

首先,如果一个客户要用到一款手机,一般的做法是客户去创建一款手机,然后拿来用:

image 

这时,客户需要知道怎么去创建一款手机,客户和手机就紧密耦合在一起了.为了降低耦合,就出现了工厂类,把创建手机的操作放到了工厂里面去,客户直接使用工厂的创建手机方法,传入想要的手机型号就行了,而不必去知道创建的细节.

image

工厂方法模式

随着手机种类越来越多,简单工厂模式出现了弊端,每次新加入手机品种,工厂类都要加入新的创建逻辑.这时我们就可以把工厂类定义成了接口,而每增加一种新的手机,就增加该手机对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码:

image

抽象工厂模式

随着工厂规模的继续扩大,工厂开始生产充电器了.这时候工厂有二个系列的产品:手机和充电器.而手机必须使用对应的充电器才能使用.这时候分别使用一个手机工厂和一个充电器工厂都不能满足我们的需求,我们必须确认手机跟充电器的对应关系.我们把工厂改造一下,把手机工厂跟充电器工厂联系在一起:

image

 

设计模式初学者,欢迎指点...

 

 


基本上是这个意思了。算入门了。不过你抽算工厂的类图明显画错了。N97,N98工厂对抽象工厂应该是继承和实现关系。应该是实线或虚线+三角箭头并指向抽象工厂。而不是你画的调用依赖关系。挑点小毛病,不要见怪。哈哈。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics