设计模式系列(一)设计模式概要

2019/2/27 posted in  设计模式

在这里给大家推荐一本设计模式入门的书《HeadFirst 设计模式》,这是我真正理解设计模式的开始。当然对于设计模式的理解,需要一定的开发经验才能真正理解的。
image
本篇文章不是对设计模式的全解。而是我自己在iOS的实践中对设计模式的理解的一个一个梳理。我在DesignPatterns iOS工程实现里写出了相关的Demo

学习方法:抽象—》具体—》应用—》引申。重点在与理解设计模式的几大原则在设计模式里的体现。当你理解了几大原则在设计模式里的体现,也就理解了设计的精髓所在。在自己写出相关Demo后,然后自己默写出相关设计模式的UML图,分析每种设计模式的优劣是为解决什么问题而诞生。那么那你就真正理解了设计模式。

设计模式的六大原则

  1. 开闭原则(面向对向设计的首要目标:对扩展开放,对修改关闭
    对扩展开放,对修改关闭,也就是在进行扩展时,不要对先前的代码修改(因为如果对先前的代码进行修改的化,需要重新测试)。对扩展开放最好直接创建一个新类,其他的东西都不要更改。可以采用抽象的方式,将对象抽象出来,形成对这个"抽象化"处理。

  2. 里氏替换原则(子类替换基类业务不受影响
    在软件中将一个基类对象替换成它的子类对象,程序不将不会出现任何差错。其实这是开闭原则的一个实现。也就是在程序中尽量使用基类类型来对对象进行定义,而运行时在确定其子类类型。这样有一种面向基类,面向协议编程,这样在有扩展进来时,更改的代码就会很少。

  3. 依赖倒置原则(面向协议编程)
    名字取的很高大上。实际就一句话,实现依赖抽象,抽象不依赖实现。也就是面向协议编程,不针对实现编程。

  4. 接口隔离原则(接口分离)
    使用多个专门的接口,而不使用单一的总接口。每个接口
    应该承担一种相对独立的角色,将不同功能类型的接口进行分离

  5. 迪米特法则(减少对象之间交互
    应该减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应该发生任何直接的作用。

  6. 合成复用原则(多用组合少用继承
    尽量使用合成与聚合,而不是使用继承。
    这条在实际的开发中,的确很有感触。继承用的不好会导致维护的困难。

设计模式分类

创建型设计模式
结构型设计模式
行为型设计模式

一:创建型(5种)

1:单例模式
2:工厂方法(生成单一产品)
3:抽象工厂(生产系列产品)
4:建造模式(生产比较复杂的具有统一生产流程的产品,将生产流程固话)
5:原型设计模式(clone的实现)

二:结构型(7种)

6:适配器模式(将一个对象适配成需要的接口)
7:桥接模式
8:组合模式(类似于iOS里的view,对每一个组件具有相同的操作方法)
9:外观模式(子系统)
10:享元模式(聚合使用)
11:代理模式
12:装饰模式

三:行为型(11种)

13:责任链模式
14:命令模式
15:解释器模式(暂时不太明白)
16:迭代器模式
17:中介者模式
18:备忘录模式
19:观察者模式
20:状态模式
21:策略模式
22:模板方法模式
23:访问者模式(暂时不太明白)

其中,命令模式,状态模式,策略模式,都是同的思想,将命令封装,将状态封装,将策略封装。