什么是设计模式?
设计模式是软件设计中常见问题的典型解决方案。 它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。
设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。 模式并不是一段特定的代码, 而是解决特定问题的一般性概念。 你可以根据模式来实现符合自己程序实际所需的解决方案。
人们常常会混淆模式和算法, 因为两者在概念上都是已知特定问题的典型解决方案。 但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。 同一模式在两个不同程序中的实现代码可能会不一样。
算法更像是菜谱: 提供达成目标的明确步骤。 而模式更像是蓝图: 你可以看到最终的结果和模式的功能, 但需要自己确定实现步骤。
为什么要学习设计模式?
设计模式来源于众多前人的经验和智慧,它们是从许多的实践和优秀的系统项目中总结提炼出来的设计方案
可以提高程序员的思维能力、编程能力和设计能力。
使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
使设计的代码可复用性高、可读性强、可靠性高、灵活性好、可维护性强。
# 模式分类
设计模式可以有两种方法来进行分类(以下我们采用第一种划分方式进行介绍):
- 第一种可以根据其 目的,通过解决什么样的问题来进行划分,可分为:创建型、结构型、行为型 三种。
- 第二种可以根据其作用范围来进行划分,根据其作用与类上还是对象上,可分为:类模式、对象模式 两种。
- 创建型
创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。
- 工厂方法模式(Factory Method)
- 抽象工厂模式(Abstract Factory)
- 生成器模式(Builder)
- 原型模式(Prototype)
- 单例模式(Singleton)
- 结构型
结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
- 适配器模式(Adapter)
- 桥接模式(Bridge)
- 组合模式(Composite Pattern)
- 装饰模式(Decorator)
- 外观模式(Facade)
- 享元模式(Flyweight)
- 代理模式(Proxy)
- 行为型
行为模式负责对象间的高效沟通和职责委派。
- 责任链模式(Chain of Responsibility)
- 命令模式(Command)
- 迭代器模式(Iterator)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 观察者模式(Observer)
- 状态模式(State)
- 策略模式(Strategy)
- 模板方法模式(Template Method)
- 访问者模式(Visitor)