[FirstHead Design Pattern]第一章_读书笔记

[TOC]

2017年12月1日

1. 鸭子类通过继承产生其他的鸭子.

通过集成实现鸭子类的扩展.png

2. 利用接口分离叫的能力和飞的能力

这样使得橡皮鸭子不会飞也不会叫了达到了我们的目的.
如果有会叫的橡皮鸭子你可以让它实现这个接口就行了.

使用接口分离叫的能力和飞的能力.png

用最小的改动来修改软件.png

3. 把问题归零

  1. 集成并不能很好的解决问题,在鸭子类不断改变的情况下,让所有的鸭子具有相同的行为是不恰当的.
  2. 接口也不尽如人意.因为接口不具有实现方法,实现接口并不能达到代码复用的目的.

第一个设计原则横空出世

找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起.

所有的模式都提供了一套方法: 系统中的某部分改变不会影响其他部分

4. 针对接口编程(针对超类型编程)

变量的声明类型应该是超类型(supertype),超类型通常是一个 抽象类或者接口,这样, 只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量.

使用Animal这个超类变量对Dog子类进行动态调用.png

第二个设计原则

针对接口编程,而不是针对实现编程.

5. 总结陈词

  1. 通常在系统设计的时候,预先考虑有哪些地方未来可能需要变化,于是提前在代码中加入这些弹性. 原则与模式可以应用在软件开发生命周期的任何阶段.

  2. 上面的"鸭子类"的例子中,我们用一个类代表一个行为,其实是符合OO系统的特性的.因为在这个例子中,碰巧"东西"是个行为.但是,即使是行为,也仍然可以有状态和方法,例如,飞行的行为可以具有实例变量用来记录飞行的行为属性(扇动翅膀的速度和飞行高度等.)

6.练习题

  1. 使用我们新的设计, 如果你要加上一个火箭动力的飞行动作到SimUDuck系统中,你该怎么做?
答: 创建一个RocketEngineFly类实现FlyBehavior接口,实现fly()方法.最后fly()方法里调用火箭动力飞行的方法.
  1. 除了鸭子之外,你能够相处什么类会需要用到呱呱叫的行为?
答: 1. 大鹅 2. 青蛙 

7. 这个模式的本质

Duck类具有飞和叫的行为,但是它本身不做这些行为,而是委托(delegate)给两个接口FlyBehavior和QuackBehavior接口做这两个动作.

8. 具有动态行为的鸭子

针对Duck超类中的 flyBehavior和quackBehavior两个变量,我们给他们分别加上set方法.这样就能在执行时动态设置行为 ,只需要调用set方法就行了传入相应的行为实现类的实例作为参数.

提供set方法.png

9. 封装行为的大局观

至此,我们完成的Duck类的封装工作,接下来我们来看一下Duck类整体结构.

Duck类的结构关系.png

第三个设计原则

多用组合,少用继承.

10. 第一个设计模式-策略模式(Strategy Pattern)

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

11. 我如何使用设计模式?

  1. 在开发人员的圈子里,设计模式相当于共享语言.当你对你设计的系统进行描述的时候,只需要说明你用了什么设计模式,大家就都明白你用了什么样的规范和方法.
  2. 使用设计模式并不作用于你的代码中,而是印在你的大脑中. 一旦你设计新的系统时想到了那么多的设计模式,你就能在新的设计中采用他们.当你面对一个旧工程,复杂纷乱的代码时,你可以用大脑中的设计模式重做这些代码.
  3. 设计模式比库的等级更高.实际上库仅仅给我们提供了一些具体的实现. 大部分的库也是围绕设计模式构造的.
  4. 知道OO基础概念,是不能设计出弹性的,可复用的,可维护的系统的.但是这些设计经验被收集整理成就了设计模式.
  5. 建立可维护的OO系统,要诀就在于随时想到系统以后可能需要变化以及应付变化的原则.

11. 章末总结

第一章知识点总结.png

@ 2017年12月3日22:39:20

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,567评论 24 698
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 129,295评论 18 137
  • 策略模式,是我们接触到的第一个设计模式,也是较容易理解的一个模式。我们可以给它下一个定义:** 定义了算法族,分别...
    六尺帐篷阅读 517评论 0 7
  • 从来没有实实在在的体会到什么是想一个人,12号你走的时候我还没发现原来看不见你是一件很难受的事,那天去了很有名的王...
    我的刀呢阅读 172评论 0 0
  • 提笔绘千秋 浓墨万古愁 薄纸峨眉皱 落砚踏孤舟
    星尘梦羽阅读 299评论 4 6
  • 以前想看看《黄帝内经》有百分之九十八的字我认识,但就因这百分之二不认识的字,还是障碍了我看这本书的兴趣,也障碍了我...
    彗菱阅读 342评论 0 1