design_patterns

目标
- 理解松耦合设计思想
- 掌握面向对象设计原则
- 掌握重构技法改善设计
- 掌握GOF核心设计模式

《设计模式 可复用面向对象软件的基础》

底层思维

向下,如何把握机器底层 从微观理解对象构造
* 语言构造
* 编译转换
* 内存模型
* 运行时机制

深入理解面向对象
向下:深入理解三大面向对象机制
* 封装, 隐藏内部实现
* 继承, 复用现有代码
* 多态, 改写对象行为

抽象思维

向上,如何将我们的周围世界抽象为程序代码
* 面向对象
* 组件封装
* 设计模式
* 架构模式

如何解决复杂性

  • 分解

    • 分而治之
  • 抽象

    • 多态
    • 只需修改很少的代码

复用

八大面向对象设计原则

* 依赖倒置原则(DIP)
    隔离变化
* 开放封闭原则(OCP)
    对扩展开放,对更改封闭
* 单一职责原则(SRP)
    一个类应该仅有一个引起它变化的原因
    变化的方向隐含着类的责任
* Liskov替换原则(LSP)
    子类必须能够替换他们的基类(is a)
* 接口隔离原则(ISP)
    接口应该小而完备
* 优先使用对象组合(黑箱复用),而不是类继承(白箱复用)
    继承在某种程度上破坏了封装性,子类父类耦合度高
    而对象组合只要求被组合的对象具有良好定义的接口
* 封装变化点
* 针对接口编程,而不是针对实现编程
    高内聚、松耦合

接口标准化

GOF-23模式分类

从目的来看
    * 创建型 Creational
    * 结构型 Structural
    * 行为型 Behavioral
从范围来看
    * 类模式处理类与子类的静态关系
    * 对象模式处理对象间的动态关系
从封装变化角度对模式分类
    组件协作
        现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用之间的松耦合,是二者之间协作时常用的模式            
        * Template Method 模版方法
            稳定 变化
        * Strategy 策略模式
            扩展 而不是更改源码 遵循开闭原则 if-else
            定义一系列算法,把他们一个个封装起来,并且使它们可互相变化(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)
        * Observer/Event
    单一职责
        * Decorator
        * Bridge
    对象创建
        * Factory Method
        * Abstract Factory
        * Prototype
        * Builder
    对象性能
        * Singleton
        * Flyweight
    接口隔离
        * Facade
        * Proxy
        * Mediator
        * Adapter
    状态变化
        * Memento
        * State
    数据结构
        * Composite
        * Iterator
        * Chain of Resposibility
    行为变化
        * Command
        * Visitor
    领域问题
        * Interpreter

应对变化 提高复用

重构书籍推荐

《重构–改善既有代码的设计》
《重构与模式》

重构关键技法
静态 ->动态
早绑定 -> 晚绑定
继承 -> 组合
编译时依赖 -> 运行时依赖
紧耦合 -> 松耦合

来发评论吧~
Powered By Valine
v1.5.2