设计模式,即Design Patterns,是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性。
设计模式把一些常用的设计思想提炼出一个个模式,然后给每个模式命名,这样在使用的时候更方便交流。
23个常用模式分为创建型模式、结构型模式和行为型模式三类
创建型模式关注点是如何创建对象,其核心思想是要把对象的创建和使用相分离,这样使得两者能相对独立地变换。
创建型模式包括:
工厂方法:Factory Method
抽象工厂:Abstract Factory
建造者:Builder
原型:Prototype
单例:Singleton
工厂方法:
工厂方法是指定义工厂接口和产品接口,但如何创建实际工厂和实际产品被推迟到子类实现,从而使调用方只和抽象工厂与抽象产品打交道。
实际更常用的是更简单的静态工厂方法,它允许工厂内部对创建产品进行优化。
调用方尽量持有接口或抽象类,避免持有具体类型的子类,以便工厂方法能随时切换不同的子类返回,却不影响调用方代码
抽象工厂模式是为了让创建工厂和一组产品与使用相分离,并可以随时切换到另一个工厂以及另一组产品;
生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。
原型模式是根据一个现有对象实例复制出一个新的实例,复制出的类型和属性与原实例相同。
单例模式(Singleton)的目的是为了保证在一个进程中,某个类有且仅有一个实例
结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能,但结构型模式不仅仅简单地使用继承,而更多地通过组合与运行期的动态组合来实现更灵活的功能。
结构型模式有:
适配器
桥接
组合
装饰器
外观
享元
代理
- Adapter模式可以将一个A接口转换为B接口,使得新的对象符合B接口规范。
- 装饰器(Decorator)模式,是一种在运行期动态给某个对象的实例增加功能的方法
- 外观(Facade)模式是为了给客户端提供一个统一入口,并对外屏蔽内部子系统的调用细节
- 享元模式的设计思想是尽量复用已创建的对象,常用于工厂方法内部的优化。
- 代理模式 为其他对象提供一种代理以控制对这个对象的访问。
行为型模式主要涉及算法和对象间的职责分配。通过使用对象组合,行为型模式可以描述一组对象应该如何协作来完成一个整体任务。
行为型模式有:
责任链
命令
解释器
迭代器
中介
备忘录
观察者
状态
策略
模板方法
访问者