文章目录 1. 设计模式分类 2. 创建型模式 1)单例模式 2)原型模式 3)工厂模式 4)抽象工厂模式 5)建造者模式 3. 结构型模式 1)适配器模式 2)桥接模式 3)组合模式 4)装饰者模式 5)外观模式 6)享元模式 7)代理模式 4. 行为型模式 1)迭代器模式 2)解释器模式 3)观察者模式 4)中介者模式 5)访问者模式 6)备忘录模式 7)状态模式 8)策略模式 9)命令模式 10)模板方法模式 11)责任链模式 5. 设计模式的原则 1)单一职责原则 2)开闭原则 3)里氏替换原则 4)接口隔离原则 5)依赖倒置原则 6)迪米特法则(最少知识原则) 7)合成复用原则 1. 设计模式分类 设计模式一共有23种, 创建型模式:5种,核心目标:解耦对象创建的过程。 结构型模式:7种,核心目标:优化对象与类的组合结构。 行为型模式:11种,核心目标:优化对象间的通信与职责分配。2. 创建型模式 1)单例模式 1. 目标:保证一个类只有一个实例,并提供一个访问它的全局访问点。 2. 场景:数据库连接池、配置管理。 3. 类型写法:8种 1)饿汉式--静态常量 2)饿汉式--静态代码块 3)懒汉式--线程不安全 4)懒汉式--同步方法(线程安全) 5)懒汉式--同步代码块(线程安全) 6)双重检查 7)静态内部类 8)枚举2)原型模式 1. 目标:给出个原型,通过复制创建更多同类型的对象。3)工厂模式 特点:一个接口有多个实现,通过工厂来创建出需要的实现。 目标:将对象创建延迟到子类,避免客户端直接依赖具体类。 场景:需要根据不同的条件动态创建不同的对象。4)抽象工厂模式 目标:创建一组相关或依赖的对象族。 场景:跨平台 UI 组件库(如不同操作系统的按钮、文本框)。5)建造者模式 目标:使用多个简单的对象,一步步的构建成一个复杂的对象,避免构造器参数爆炸。 场景:创建包含多个可选参数的对象(如订单、配置)。3. 结构型模式 1)适配器模式 目标:通过使用适配器重写目标接口,将一个类的某个接口(目标接口)转换成客户希望的另外一个接口,类似于 数据转化功能,将不兼容的接口转换为客户端期望的接口。 场景:整合第三方库或遗留代码。2)桥接模式 特点:将抽象部分和实现部分分离,使他们都可以独立的变化,把两个角色之间的继承关系变成了耦合关系。3)组合模式 4)装饰者模式 特点:对已有的业务逻辑进行一定的封装,在不改变原有结构的前提下,增加一些其他新的功能。 目标:动态的为对象添加职责,避免子类膨胀。 场景:Java I/O 流(如 BufferedInputStream 装饰 FileInputStream)。5)外观模式 6)享元模式 特点:以共享的模式来避免相同内容对象的开销。7)代理模式 特点:创建一个代理对象,和实际对象一样去实现某个接口,并在代理对象类中引用实际对象,去实现某些功能,也可对原有的功能进行增强。 目标:控制对对象的访问(延迟加载、权限控制等)或者添加某些功能。 场景:Spring AOP 动态代理、远程方法调用(RMI)。4. 行为型模式 1)迭代器模式 特点:使用迭代器顺序访问集合中的每一个元素,不需要知道集合对象的底层展示。2)解释器模式 3)观察者模式 特点:定义了一种一对多的依赖关系,让多个观察者同时监听某一个主题对象,当这个主题对象的状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己。4)中介者模式 5)访问者模式 6)备忘录模式 特点:用来存储另外一个对象内部状态的快照的对象。7)状态模式 特点:允许一个对象在其内部状态变化时,改变其行为。8)策略模式 特点:将多个算法封装到具有共同接口的多个实现类中,使得一个接口可以实现不同的功能,类似于一个接口的多个不同实现。 场景:支付方式选择(支付宝、微信、银行卡)。9)命令模式 特点:将一个命令封装成一个对象,可以对命令接受者进行不同的命令处理。10)模板方法模式 目标:定义算法骨架,允许子类重写某些步骤。 场景:Servlet 生命周期(init(), service(), destroy())。11)责任链模式 5. 设计模式的原则 1)单一职责原则 一个类只负责一个功能。2)开闭原则 对扩展开发,对修改关闭。3)里氏替换原则 任何基类可以出现的地方,子类一定也可以出现。 子类应能替换父类且不影响程序逻辑。4)接口隔离原则 使用多个隔离的接口,比使用一个接口要好。 客户端不应依赖它不需要的接口。5)依赖倒置原则 应该针对接口编程,依赖于抽象而不依赖于具体。6)迪米特法则(最少知识原则) 一个实体应该尽量少的与其他实体发生相互作用。7)合成复用原则 尽量使用合成、聚合,而不是使用继承。