什么是设计模式
设计模式是软件设计中常见问题的典型解决方案。 它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。
设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。 模式并不是一段特定的代码, 而是解决特定问题的一般性概念。 你可以根据模式来实现符合自己程序实际所需的解决方案。
并非所有的软件模式都是设计模式,设计模式特指软件“设计”层次上的问题。还有其它非设计模式的模式,如架构模式。
算法也不能算是一种设计模式,因为算法主要是用来解决计算上的问题,而非设计上的问题
为什么学习设计模式
设计模式是针对软件设计中常见问题的工具箱, 其中的工具就是各种经过实践验证的解决方案。 即使你从未遇到过这些问题, 了解模式仍然非常有用, 因为它能指导你如何使用面向对象的设计原则来解决各种问题。
设计模式定义了一种让你和团队成员能够更高效沟通的通用语言。 你只需说 “哦, 这里用单例就可以了”, 所有人都会理解这条建议背后的想法。 只要知晓模式及其名称, 你就无需解释什么是单例。
设计模式的分类
创建型
提供创建对象的机制, 增加已有代码的灵活性和可复用性。
单例模式(Singleton):只生成一个对象实例的特殊类
多例模式(Multi通):通过键值对管理一组多例类的实例化对象
静态工厂模式(Static Factory):通过静态方法来创建一系列相关或相互依赖的对象
简单工厂模式(Simple Factory):通过非静态方法来创建一系列相关或相互依赖的对象
工厂方法模式(Factory method):为每一个产品提供一个独立的工厂类,通过不同的工厂实例来创建不同的产品实例
抽象工厂模式(Abstract factory):为每一个产品族提供一个独立的工厂类,通过不同的工厂实例来创建不同的产品族中的每个产品实例
建造者模式(Builder)
原型模式(Prototype)
对象池模式(Pool)
结构型模式
介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
适配器模式(Adapter)
桥接模式(Bridge)
组合模式(Composite)
装饰者模式(Decorator)
外观模式(Facade)
享元模式(Flyweight)
代理模式(Proxy)
数据映射模式(Data Mapper)
依赖注入模式(Dependency Injection)
流接口模式(Fluent Interface)
注册模式(Registry)
行为模式
负责对象间的高效沟通和职责委派
策略模式(Strategy)
模板方法模式(Template method)
观察者模式(Observer)
迭代器模式(Iterator)
责任链模式(Chain of responsibility)
命令模式(Command)
备忘录模式(Memento)
状态模式(State)
访问者模式(Visitor)
中介者模式(Mediator)
解释器模式(Interpreter)
规格模式(Specification)
空对象模式(Null Object)
其他
委托模式(Delegation)
服务定位器模式(Service Locator)
资源库模式(Repository)