《设计模式》旧书重读和总结:创建…

      前面一篇文章我开头说,《设计模式》这么书翻来覆去地看,就只看出两个字“回调”。一方面是为了搞笑,但也并不全属信口开河。因为大部分模式都是基于多态,我认为多态其实就是面向对象提供的回调机制。
      下文我对照经典书籍《设计模式》,讲讲我对23种设计模式的理解。
      按照顺序依次说吧:
      1) Abstract Factory(抽象工厂)模式:其实就是用来创建对象的strategy。可以把抽象工厂基类看成Strategy基类,具体工厂看成具体Strategy。关键思想就是回调:一个类要干偷鸡摸狗的事情,但不希望把乌骨鸡和中华田园犬的创建写死在该类中,于是就用这个模式把这些对象的创建和偷鸡摸狗的操作解耦开来。如果抽象工厂的产品只有一个,可以不需要上下文的帮助,这时候我不知道要称其为什么模式了,好像就是最简单的多态了。
      2) Builder(生成器)模式:这个模式是个杂碎。只看Builder、ConcreteBuilder和Director的关系,又是strategy那套,不过buildPart,buildPart,getResult的这个流程又有所不同,很容易把人搞蒙。其实没这么复杂,游戏制作,常需要制作一个地图编辑器。builder模式思想与此类似:一个composite对象,总要提供个一步步创建的方法吧。可能觉得单纯说这个太显然太没深度,所以gof又把体位复杂化,引入了Builder、ConcreteBuilder。所以搞得Builder模式就像compositer模式的一部分(如何构建)和strategy模式的杂交。我以前编过类似builder的程序,但是没用到ConcreteBuilder,直到结项也没收到什么报应。所以书上的Builder模式有过度设计的嫌疑:不管3721,所有类都提出接口和具体类,这大部分时候只是在折腾自己。
      3) factory method(工厂方法):其实就是用来创建对象的template模式,也是我上篇文章提到的回调机制的一种,还是挺不好的一种。
      4) prototype(原型模式):我得承认,我没有完全理解这个模式。我能看懂每个字,也能看懂整段话,但实在不知道这东东能用在哪里,所以过几天又忘记这茬了。
      5) singleton(单件模式):估计是最多人知道的设计模式了。主要优点是方便,不需要找个疙瘩扔下一个类的实例了。缺点是多线程下线程安全和效率是个两难的选择。加锁的话调用代价变高,不加锁有程序崩溃的风险。顺便说句,有些人对此提出双检锁算法(Double-Checking-Lock),不过在很多环境下该算法是无效的,详见http://en.wikipedia.org/wiki/Double-checked_locking。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值