HeadFirst 设计模式 橡皮鸭子例子心得体会

今天看了 HeadFirst 设计模式最开始的那个橡皮鸭子的例子,让Joe去monster.com的那句话确实挺逗的,好长时间没有看书的时候笑出来了,呵呵。

设计模式我正在学习,总是有些似是而非的感觉,理解上还是有很多问题,主要是没有这方面的实践,但很多教训倒是都尝过了。

橡皮鸭子的例子,我看了似乎明白了,我根据我的理解,自己举个例子说明,看看能不能说明白,自言自语的性质。

有一个工厂,专门为其它厂家制作铁箱子,铁箱子的大小、铁板的薄厚都不同,因此需要不同口径的螺丝。

面向实现的方法就好像:工厂要做三个箱子A、B、C,它们有统一的要求,必须用24个螺丝固定,至于多大的口径,由负责的三个工人自己决定。结果有一天,工厂接到一个订单,制作箱子D,用焊接,不用螺丝固定。这样,按照工厂实行了N年的工作流程,箱子必须由螺丝固定,而焊接好的箱子再无缘无故的打上24个螺丝也是不能接受的。这就面临了一个选择,要么该变实施多年的工艺流程,要么专门为D设计一个流程。

这个问题(包括橡皮鸭),我认为其根源在于,试图预先就把共有的东西抽象出来(这并没错),但就此打住(这就它的错了),把实现的压力都抛给具体的各个子类了。管生不管养,这可不好。

第一种情况,出现了个不会飞的橡皮鸭,这就属于抽象时没有抽象好,抽象的属性中包含了未来可能出现的子类中不一定有的内容

第二种情况:为了解决第一种情况,把实现部分都放到子类中去。而子类的实现是与其它子类无关的,这就破坏了复用的原则。

面向接口的解决方法:把行为的多态都实现成一个个对应的类,用哪个具体的行为就使用哪个类

写到这,感觉自己还是没完全理解这个橡皮鸭的例子,上面的越写越乱的感觉,还要继续努力!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值