Java——设计模式的7大原则及24种设计模式
-
设计模式的7大原则
-
单一职责原则:简而言之就是一类一功能。
-
开闭原则:对类的扩展开放,修改封闭。
-
里氏替换原则:对开闭原则的补充,父类存在的地方子类一定可以出现。
-
依赖倒置原则:程序依赖于抽象类而不依赖于具体实现类
-
接口隔离原则:不同的功能定义在不同的接口上
-
合成/聚合复用原则:一个新的对象或者类,通过注入多个类来达到类的复用和扩展
-
迪米特法则:一个类尽可能少的与其他对象发生依赖,达到降低模块之前的耦合度
-
-
设计模式按功能和使用场景分3大类、24小类
- 创建型模式 * 5:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式;
- 结构型模式 * 8:适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、亨元模式、代理模式;
- 行为型模式 * 11:责任链模式、命令模式、解释器模式、迭代模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式。
-
创建型模式概念:提供了多种优雅创建对象的方法
-
工厂模式概念
在接口中定义创建对象的方法,而具体创建对象的过程在子类中实现
-
抽象工厂模式概念
工厂模式的升级版——超级工厂,在工厂模式下添加一个创建多个对象的抽象接口
-
单例模式概念
将类的实例化方法私有化,然后提供一个全局唯一的获取该实例化方法的方法(保证系统实例唯一性的重要手段)- 懒汉模式 instance+synchronized
- 饿汉模式
- 静态内部类 static
- 双重校验锁 violate+synchronized
-
建造者模式概念
多个简单的对象创建一个复杂的对象 -
原型模式概念
调用原型实例的clone方法来创建对象- 浅复制:实现Cloneable接口并覆写clone方法;其基本数据类型的变量值会重新复制和创建,而引用数据类型仍指向原对象的引用。
- 深复制:基本数据类型和引用数据类型都会本重新复制和创建
-
-
结构型模式概念:通过类和接口之间的继承和引用实现创建复杂结构对象的功能
- 适配器模式:通过定义一个适配器类(Adapter)作为两个不兼容接口的桥梁。
- 类适配器模式:Adapter extend Source implement Targetable
- 对象适配器模式:ObjectAdapter implement Targetable(Adapter类不在继承Source,而是持有Source的实例)
- 接口适配器模式:AbstractAdapter implement Sourceable;SourceSub1 extend AbstractAdapter ;不实现接口中的所有方法,使用继承该抽象类按需实现方法。
- 桥接模式:将抽象类及其实现类解耦,使二者可以根据需求独立变化。该模式主要用于解决需求多变的情况选使用继承造成类爆炸的问题。【例如:JDBC和DriverManager就使用了桥接模式】
- 过滤器模式:过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。
- 组合模式:部分整体模式,实现部分和整体操作的一致性。根据树形结构来表示部分和整体之间的关系。
- 装饰器模式:Decorator,无需改变原有类及类的继承关系的情况,动态扩展一个类的功能。
- 外观模式:门面模式Facade 。外观模式就是将多个子系统及其之间复杂关系和调用流程封装到一个统一的接口或类中以对外提供服务。
- 亨元模式:通过对象的复用来减少对象创建的次数和数量,以减少系统内存的使用和降低系统的负载;
- 代理模式:为对象提供一种通过代理的方式来访问并控制该对象行为的方法。
- 适配器模式:通过定义一个适配器类(Adapter)作为两个不兼容接口的桥梁。
-
行为型模式概念:通过类之间不同的通信方式实现不同的行为方式
- 责任链模式:为了避免请求发送者与多个请求处理者耦合在一起,责任链模式让所有的处理者持有下一个对象的引用,从而将请求串成一条链,类似于多米诺骨牌。
- 命令模式:将请求封装为命令基于事件驱动异步地执行,以实现命令发送者和命令的执行者之间的解耦。
- 解释器模式:给定一种语言,并定义该语言的语法表示,然后设计一个解释器来解释语言中的语法,这种模式常备用于SQL解析、符号处理引擎等。
- 迭代器模式:提供了顺序访问集合对象中的各种元素,而不暴露该对象内部结构的方法。【例如HashMap】
- 中介者模式:指对象和对象之前不直接交换,而是通过一个名为中介者的角色来实现对象之间的交互,使原有对象之间的关系变得松散,而且可以通过定义不同的中介者来改变他们之间的交互。(也叫做调停模式,迪米特法则的典型应用)
- 备忘录模式:快照模式,该模式将当前对象的内部状态保存到备忘录中,以便在需要时能将该对象恢复到原先保存的状态
- 观察者模式:被观察者的状态发生变化时,所有的观察者都会接到消息事件。【发布-订阅模式/模式-视图模式】
- 状态模式:就是给对象定义不同的状态,并未不同的状态定义不同的行为,在对象状态发生切换时自动切换状态的行为。
- 策略模式:为同一个行为定义不同的策略,并为每种策略都实现了不同的方法。
- 模板方法模式:在接口中定义一个算法框架,并通过继承的方式将算法的实现延迟到子类中,使得子类可以在不改变算法框架的前提下,重新定义该算法在某些环境的实现。
- 访问者模式:将数据结构和作用于结构上的操作解耦,使得集合的操作可自由地演化而不影响其数据结构。适用于数据结构稳定但是数据操作方式多变的系统中。
脚踏实地,注重基础。