什么是设计模式
设计模式是软件开发过程中面临的通用问题的解决方案。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性
按使用目的分类
创建型--主要用于创建对象
- 单例模式-某个类只能有一个实例,提供一个全局的访问点
- 工厂方法模式-创建对象而不将创建逻辑暴露给客户端
- 抽象工厂-也称为工厂的工厂,由一个工厂创建其他工厂
- 建造者-封装一个复杂对象的构建过程,并可以按步骤构造
- 原型-通过复制现有的实例来创建新的实例
行为型--主要用于描述对类或对象怎样交互和怎样分配职责
- 访问者---在不改变数据结构的前提下,增加作用于一组对象元素的新功能
- 模板方法 --定义一个算法结构,而将一些步骤延迟到子类实现
- 策略 --定义一系列算法,把他们封装起来,并且使它们可以相互替换
- 状态 --允许一个对象在其对象内部状态改变时改变它的行为
- 观察者(事件发布订阅模式) --对象间的一对多的依赖关系
- 备忘录 --在不破坏封装的前提下,保持对象的内部状态
- 中介者 --用一个中介对象来封装一系列的对象交互
- 迭代器 --一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构
- 解释器 --给定一个语言,定义它的文法的一种表示,并定义一个解释器
- 命令 --将命令请求封装为一个对象,使得可以用不同的请求来进行参数化
- 责任链--将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会
结构型--主要用于处理类或对象的组合
- 适配器--将一个类的方法接口转换成客户希望的另外一个接口
- 桥接模式--将抽象部分和它的实现部分分离,使它们都可以独立的变化
- 组合模式--将对象组合成树形结构以表示"部分-整体"的层次结构
- 装饰器--动态的给对象添加新的功能
- 外观---对外提供一个统一的方法,来访问子系统中的一群接口
- 享元模式--通过共享技术来有效的支持大量细粒度的对象
- 代理模式--为其他对象提供一个代理以便控制这个对象的访问
按使用范围分类
类模式--处理类和子类之间的关系,这些关系通过继承建立
- 工厂方法模式
- 类-适配器
- 模板方法
- 解释器
对象模式--处理对象间的关系,这些关系在运行时刻变化
- 抽象工厂
- 建造者
- 原型
- 单例模式
- 对象-适配器
- 桥接模式
- 组合模式
- 装饰器
- 外观
- 享元模式
- 代理模式
- 责任链
- 命令
- 迭代器
- 中介者
- 备忘录
- 观察者
- 状态
- 策略
- 访问者
设计模式六大原则
单一原则
一个类只负责一项职责,尽量做到类只有一个行为原因引起变化;
业务对象(BO business object)、业务逻辑(BL business logic)拆分
里氏替换原则
子类可以扩展父类的功能,但不能改变原有父类的功能;
目的:增强程序的健壮性。实际项目中,每个子类对应不同的业务含义,使父类作为参数,传递不同的子类完成不同的业务逻辑
依赖倒置原则
面向接口编程;(通过接口作为参数实现应用场景)
依赖于抽象而不依赖于具体。
抽象就是接口或者抽象类,细节就是实现类
依赖倒置原则定义:
上层模块不应该依赖下层模块,两者应依赖其抽象
抽象不应该依赖细节
细节应该依赖抽象
接口负责定义public属性和方法,并且申明与其他对象依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑
接口隔离
建立单一接口;(扩展为类也是一种接口,一切皆接口)。
使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度。
降低依赖,降低耦合。
定义:
客户端不应该依赖它不需要的接口;
类之间依赖关系应该建立在最小的接口上
迪米特原则
最少知道原则,尽量降低类与类之间的耦合;
一个对象应该对其他对象有最少的了解,
即一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立
开闭原则
用抽象构建架构,用实现扩展原则;
开闭原则就是说对扩展开放,对修改关闭。
一个软件实体通过扩展来实现变化,而不是通过修改原来的代码来实现变化。
实现一个热插拔的效果。
开闭原则是对软件实体的未来事件而制定的对现行开发设计进行约束的一个原则