设计模式之欢迎来到设计模式世界(二)

第一节的内容,不知道大家看的如何。小编在博客园的评论里,找到了第一篇的一个缺点,没有把动态改变行为的Duck子类列出来,导致有小伙伴有疑问。在这里说声抱歉,是我疏忽了,好在有GitHub,让大家可以进去一窥究竟,在后续的学习中我也会注意此类问题。

先来解答下上次课程留下的思考题,利用继承来提供Duck的行为,这会导致哪些缺点。有以下几个(看看你的答案是否和他吻合呢):

A 代码再多个子类中重复

B 运行时的行为不容易改变

D 难以得知所有鸭子的全部行为

F 改变会牵一发动全身,造成其他鸭子不想要的改变

然后我们再来回顾下,上一篇说到的几个变化,通过类图再次给大家做下复盘。首先来看下最初是的简单的模型,此时鸭子只会呱呱叫、有外观显示以及游泳的能力。

接下来,我们想让鸭子飞,一开始用了继承的方式来解决,导致不需要飞行的鸭子类也继承了这功能, 显然是不太合理的,也就是开篇说到的继承存在的几个缺点。

哈哈,所以我们需要通过接口来实现,把飞行和呱呱叫功能封装成接口,只有需要相应能力的鸭子自行去实现此接口,这样就能达到按需获取的情况

上图中的Flyable和Quackable 就是鸭子类需要各自去实现的功能,按需实现。那我不想飞的鸭子就不用飞了,不想叫的鸭子就不需要叫了,让他静静地待着吧。

在上图我们看到了两个接口是五个实现类,很明确吧,把飞行,不飞行, 呱呱叫,吱吱叫,不叫给你分的清清楚楚,明明白白。

接下来,就是整合鸭子的行为,也就是我在代码里没写明白的部分,实在是对不起各位。

在Duck子类创建的时候,先在构造器里默认创建各个行为类,比如你需要呱呱叫,并且是飞行的行为。

这就是默认的行为,然后你需要动态改变行为,就如前文所说,用setter方法重新定义你需要创建的行为即可,你创建的鸭子能从不会飞变身成装上火箭助推器的鸭子般给力

public class FlyRocketPowered implements FlyBehavior {

    public void fly() {

        System.out.println("I'm flying with a rocket!");

    }

}

Duck model = new ModelDuck();// 第一次调用,不会飞model.performFly();// 调用继承来的setter方法,把火箭动力飞行的行为定到模型鸭中,模型鸭能一飞冲天model.setFlyBehavior(new FlyRocketPowered());// 这样就成功的改变了行为model.performFly();

整个过程最后的图就是一个父类的Duck,若干个Duck的子类,一个飞行行为的接口,一个呱呱叫的接口以及若干个针对接口的实现

好啦,这样又和大家一起回顾了一遍上一篇的整体流程,你消化了吗。

在此,我还想聊聊为什么我们需要设计模式。书中也有提到,大致的意思就是,一个程序员在描述一个功能的时候,巴拉巴拉讲了一堆,说要建立一个广播类来跟踪所有的对象,只要有更新,就会通知每个倾听者。这些倾听者可以随时加入广播系统,也可以随时移除 。结果,一个拥有设计模式的老鸟就随口说了一句,你用「观察者模式」来描述刚才的这个场景,简单方便,易于沟通,还把所有需要的功能都清楚了,大家相视一笑,哈哈。忽然发现,我有时候也会对我熟悉的设计模式脱口而出,尤其是这个观察者模式,原来有些东西已经在无形之中影响了我,影响着你。

在书中,这个场景叫「共享模式」。共享模式词汇威力巨大,总结起来就是:

  • 当你使用模式名称和其他开发人员或者开发团队沟通时,你们之间交流的不只是模式名称,而是一整套模式背后所象征的质量、特性、约束。

  • 模式能够让你用更少的词汇做更充分的沟通。

  • 当你用模式描述的时候,其他开发人员便很容易地知道你对设计的想法。

  • 将说话的方式保持在模式层次,可以让你待在「设计圈子」久一点。

  • 使用模式谈论软件系统,可以让你保持在设计层次,不会被压低到对象与类这种琐碎的事情上面。

  • 对于设计模式有深入理解的团队,彼此之间对于设计的看法不容易产生误解。

最后聊聊设计模式的工具,书本中叫他为「设计工具箱内的工具

现在我们对设计模式有了一个初步的认识,接下去就要开始进入这个美妙的世界了。但是,先别急,我们需要带上属于我们的工具,把设计模式一一修理干净。其实你应该已经猜到是什么了吧。我还是再啰嗦一下

- OO基础

抽象、封装、继承、多态

- OO原则

封装变化

多用组合,少用继承

针对接口编程,不针对实现编程

- OO模式

策略』--定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

走进设计模式的世界部分就给大家介绍到这里,拿起我们的工具,往前进吧。

PS:因为最近几天项目忙,GayHub的事情稍微有点延迟,周末我好好整理下,会尽快输出。

相关阅读:设计模式之欢迎来到设计模式世界(一)

(0)

相关推荐

  • 设计模式(14) 模板方法模式

    模板方法模式 模板方法模式是面向对象系统中非常朴实的一种模式,体现出面向对象设计中继承和多态的基本特征.在开发应用的过程中,往往会在初期规划一些较粗粒度的算法,而且对参与计算的对象进行抽象,明确算法会 ...

  • 【设计模式】设计原则--面向接口编程你理解的对吗?

    最近看了<Head First Design Patterns>这本书.正如其名,这本书讲的是设计模式(Design Patterns),而这本书的第一章,讲的是很重要的一些设计原则(De ...

  • Python设计模式是什么?Python入门

    设计模式想必大家都比较熟悉,它是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式可以让代码更容易被他人理解.保证代码的可靠性,而且使用设计模式还需要遵循一定的原则.那么P ...

  • 设计模式之装饰者模式(二)

    欢迎大家的不嫌弃,继续和我一起学习设计模式.上一篇已经把装饰者模式的类图有了一个整体的出来,末尾说的去想想实现的代码,你实践了吗?是什么原因让你实践了呢?又是什么原因让你没有动手呢?没动手,可能是思路 ...

  • 每个人来到这个世界,不是为了工作,不是为...

    每个人来到这个世界,不是为了工作,不是为了享受,也不是为了繁衍,而是利用此生为人的机会,利用人独有的思辨力,觉悟力,去和深层次的自我沟通,去和不生不灭的存在连接,把自我从文化的,习惯的,经验的束缚里解 ...

  • 邮票中的植物世界(二十五)---桃花

                   桃   花     我国邮政于2013年3月16日发行了一套<桃花>特种邮票(2013-6),全套12枚. 白碧桃               品 霞     ...

  • 认知自我与认知世界(二)

    需求函数.需求曲线和需求弹性的含义 1.含义 需求量是消费者在一定时期内在某价格水平上愿意并且能够购买该商品的数量.在其他条件不变时,降价使需求量增加,涨价使需求量减少,因此需求量可以看成是价格P的单 ...

  • 人来到这个世界上只要天塌不下来其它都是小事

    我认为,只要天没塌,人没死,一切都是美好的.当然,天是不会塌下来的.经常有人讲: "天塌下来,我给你顶着."这句话主要是给身边的孩子们讲的,让她(他)们感到有一种安全感.也就是说天 ...

  • 一块板,一群人,一片海,欢迎来到浪人世界

    最开始,我只是想写冲浪运动.在天空和海浪之间,一位浪人迎风而上,矫健的身姿与海浪浑然一体,人与自然灵性和谐. 但随着视角贴近,我发现,比冲浪运动本身更迷人的,是冲浪文化和浪人精神. 生命不息,逐浪不止 ...

  • 怕是无缘来到这个世界

    阁楼韦编断三绝 ,格局格局,旺衰旺衰,无非喜用以日主搭配干支 ,财官财官,名利名利,总是所求 ......附赌博者的八字如下 ..................................... ...

  • 我们来到这个世界本来就是为了体验痛苦的,然后再将其净化升华

    我们来到这个世界本来就是为了体验痛苦的,然后再将其净化升华.我们必须给自己充分的时间整合我们体内的痛苦,最后回归成一个完整的个体,也就是我们的自性本体. 伤痛一旦生成即永远存在,它可转换存在的形式,但 ...

  • 当世界名画里的人物来到现实世界,竟然毫无违和感 !

    当世界名画里的人物来到现实世界,竟然毫无违和感 !