设计模式之工厂模式

准备这段时间,每天看看博文,认真学习一下设计模式,因为对于复杂的业务来说,确实需要了,不然,很多东西看不太懂。

今天先聊,工厂模式,我的理解,做个笔记。

工厂模式可以分为三类: 
1)简单工厂模式(Simple Factory) 
2)工厂方法模式(Factory Method) 
3)抽象工厂模式(Abstract Factory) 
         这三种模式从上到下逐步抽象,并且更具一般性。 

一般都是2类,工厂方法和抽象工厂,其中简单工厂是工厂方法的一种特例,也就是只有一个具体的工厂,而工厂方法有抽象工厂和实现它的不同具体工厂方法。而抽象工厂,则是比工厂方法更加复杂的一种,体现在程序上就是多个接口。

对于,这种设计模式,感觉还是讲故事理解更快点,因为它是一种思想,然后才转成代码的,连思想在干什么都不知道,何谈代码实现?

这里先引用别人大牛举的例子

    1)还没有工厂时代:假如还没有工业革命,如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用。
    2)简单工厂模式:后来出现工业革命。用户不用去创建宝马车。因为客户有一个工厂来帮他创建宝马.想要什么车,这个工厂就可以建。比如想要320i系列车。工厂就创建这个系列的车。即工厂可以创建产品。
    3)工厂方法模式时代:为了满足客户,宝马车系列越来越多,如320i,523i,30li等系列一个工厂无法创建所有的宝马系列。于是由单独分出来多个具体的工厂。每个具体工厂创建一种系列。即具体工厂类只能创建一个具体产品。但是宝马工厂还是个抽象。你需要指定某个具体的工厂才能生产车出来。
    4)抽象工厂模式时代:随着客户的要求越来越高,宝马车必须配置空调。而且这空调必须对应给系列车才能使用。于是这个工厂开始生产宝马车和需要的空调。
         最终是客户只要对宝马的销售员说:我要523i空调车,销售员就直接给他523i空调车了。而不用自己去创建523i空调车宝马车.
   (我只是举个例子,说到宝马配置空调完全是为了举例,甚至有点扯,哪有车和空调必须对应才能使用啊)
     这就是工厂模式。


我来一一解释一下,

1:当你不用设计工厂模式的时候,当你需要一个宝马车,必须新建一个类,定义里面的属性和方法。而你又想要个福特汽车,那么你再重新定义上面的步骤。这里就做了很多重复的事情,因为它们都是汽车,都有共性,可以节省代码,而且如果你明天又想要其他汽车,怎办?又得重头开始,没有代码复用,同时,当你各种各样的汽车太多时,就很难管理,这都是没有工厂,所谓工厂就是能产生大量的产品。

2:简单工厂就是说,只有这么一个工厂,它是 万能的,或者说是上帝(因为他无所不能),你告诉工厂说,造大众车,明天就给你造出来了,后天要雪佛兰,就造好了,你想让这个工厂干什么,就能干什么,可是,实际上汽车工厂,都是这样的吗?

3:所以就有了工厂方法模式,用例子来说,就是,我就是一家BMW(别摸我)公司,可是我这家大公司,有很多子工厂,分别造不同的系列的宝马车,比如,迷你smart,宝马7系列,等等,你用脚趾头想象都知道,肯定不是一家工厂生产出来的,肯定是不同的流水线生产的。这就是不同的工厂方法。(会造不同的宝马车)

4:而抽象工厂模式,则是面向比较复杂的对象,用网上的说,就是产品族,按照我的理解,就是具体产品有多个了,也就是抽象产品有多个接口,所以也就是这种工厂比较复杂了,也就需要抽象工厂模式,这些产品之间而且存在一定的联系,比如说例子中的空调,迷你smart汽车的空调必须是他们厂自己生产的,不能混用宝马7系列的,同样的宝马7系列的也不能用别人的空调,这里更加具体,细化,意味着复杂。也就是其他工程解决不了的。


总之,看了一些别人写的工厂模式,慢慢想想差不多,理解了这种思想,顺便推荐2个博文,个人觉得,简洁明了,看人家的代码吧。

1.http://blog.csdn.net/hguisu/article/details/7505909

2.http://blog.csdn.net/ai92/article/details/209198

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值