【23种设计模式】模式背后运用的技术对照

目录

一、结构型模式

1. 适配器模式(Adapter Pattern)

2. 桥接模式(Bridge Pattern)

3. 组合模式(Composite Pattern)

4. 装饰器模式(Decorator Pattern)

5. 外观模式(Facade Pattern)

6. 享元模式(Flyweight Pattern)

7. 代理模式(Proxy Pattern)

二、创建型模式

1. 单例模式(Singleton Pattern)

2. 工厂方法模式(Factory Method Pattern)

3. 抽象工厂模式(Abstract Factory Pattern)

4. 建造者模式(Builder Pattern)

5. 原型模式(Prototype Pattern)

三、行为型模式

1. 策略模式(Strategy Pattern)

2. 模板方法模式(Template Method Pattern)

3. 观察者模式(Observer Pattern)

4. 迭代器模式(Iterator Pattern)

5. 责任链模式(Chain of Responsibility Pattern)

6. 命令模式(Command Pattern)

7. 备忘录模式(Memento Pattern)

8. 状态模式(State Pattern)


一、结构型模式

1. 适配器模式(Adapter Pattern)

  • 技术要点

    • 类适配器:通过继承目标接口和适配者类,实现接口适配。这种方式在某些语言(如Java)中可能会受到单继承的限制。

    • 对象适配器:通过组合目标接口和适配者类,实现接口适配。这种方式更加灵活,不依赖于继承。

    • 接口适配器:在某些语言(如Java)中,可以通过实现一个包含多个方法的接口,然后只实现部分方法,其余方法抛出异常,从而达到适配效果。

  • 相关技术

    • Java中的适配器模式:可以通过实现接口或继承类来实现适配器模式。例如,java.util.Arrays.ArrayList类实现了java.util.List接口,将数组适配为列表。

    • Python中的适配器模式:利用Python的动态特性,可以通过组合和代理的方式实现适配器模式。

2. 桥接模式(Bridge Pattern)

  • 技术要点

    • 分离抽象和实现:将抽象部分与实现部分分离,使得它们可以独立变化。抽象部分定义接口,实现部分提供具体实现。

    • 组合关系:通过组合关系将抽象部分与实现部分连接起来,而不是通过继承。

    • 动态绑定:可以在运行时动态地选择实现部分,提高系统的灵活性。

  • 相关技术

    • Java中的桥接模式:可以通过接口和抽象类来实现桥接模式。例如,java.util.logging.Logger类通过桥接模式与不同的日志处理器(如ConsoleHandlerFileHandler)进行交互。

    • C++中的桥接模式:利用C++的多态和组合机制,可以实现高效的桥接模式。

3. 组合模式(Composite Pattern)

  • 技术要点

    • 组件接口:定义一个组件接口,包含所有组件(包括叶子节点和组合节点)的公共方法。

    • 叶子节点和组合节点:叶子节点表示单个对象,组合节点表示包含多个子节点的对象。组合节点可以包含叶子节点和其他组合节点。

    • 递归结构:通过递归调用组件接口的方法,实现对整个组合结构的操作。

  • 相关技术

    • 文件系统:文件系统是组合模式的经典应用。文件和文件夹都可以视为组件,文件夹可以包含文件和其他文件夹。

    • 图形界面:在图形界面中,容器组件(如窗口、面板)可以包含其他组件(如按钮、文本框),通过组合模式可以方便地管理这些组件。

4. 装饰器模式(Decorator Pattern)

  • 技术要点

    • 装饰器接口:定义一个装饰器接口,与被装饰对象的接口一致。

    • 装饰器类:装饰器类实现装饰器接口,并包含一个被装饰对象的引用。通过组合被装饰对象,可以在其基础上添加新的功能。

    • 动态添加功能:可以在运行时动态地添加装饰器,从而动态地增加对象的功能。

  • 相关技术

    • Java中的装饰器模式:可以通过接口和类来实现装饰器模式。例如,java.io包中的输入输出流类(如BufferedInputStreamDataInputStream)就是装饰器模式的应用。

    • Python中的装饰器模式:Python的装饰器语法(@decorator)可以方便地实现装饰器模式,用于函数和类的装饰。

5. 外观模式(Facade Pattern)

  • 技术要点

    • 外观类:定义一个外观类,提供一个简单的接口,封装子系统的复杂性。

    • 子系统类:子系统类包含多个复杂的类和接口,外观类通过调用子系统类的方法来实现功能。

    • 简化接口:通过外观类,客户端可以使用一个简单的接口来访问子系统的功能,而不需要了解子系统的内部细节。

  • 相关技术

    • Java中的外观模式:可以通过类和接口来实现外观模式。例如,java.sql.Connection类可以视为一个外观类,封装了底层的数据库连接和操作。

    • Spring框架:Spring框架中的ApplicationContext可以视为一个外观类,封装了Spring容器的复杂性,提供了一个简单的接口供客户端使用。

6. 享元模式(Flyweight Pattern)

  • 技术要点

    • 享元接口:定义一个享元接口,包含享元对象的公共方法。

    • 内部状态和外部状态:内部状态是共享的,存储在享元对象内部;外部状态是不共享的,存储在客户端。通过分离内部状态和外部状态,可以减少内存的使用。

    • 享元工厂:享元工厂负责创建和管理享元对象,确保共享的享元对象可以被重复使用。

  • 相关技术

    • Java中的享元模式:可以通过类和接口来实现享元模式。例如,java.lang.Integer类中的Integer.valueOf()方法实现了享元模式,通过缓存常用的整数值来减少内存的使用。

    • 字符串池:在许多编程语言中,字符串池是享元模式的应用。例如,Java中的String类通过字符串池来缓存字符串常量,减少内存的使用。

7. 代理模式(Proxy Pattern)

  • 技术要点

    • 代理类和委托类:代理类和委托类具有相同的接口,代理类通过委托类来实现功能。

    • 控制访问:代理类可以在调用委托类的方法之前或之后添加额外的逻辑,从而控制对委托类的访问。

    • 动态代理:在某些语言(如Java)中,可以通过动态代理技术在运行时动态地生成代理类。

  • 相关技术

    • Java中的代理模式:可以通过接口和类来实现代理模式。例如,java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口可以用于实现动态代理。

    • AOP(面向切面编程):AOP是代理模式的一种应用。通过AOP技术,可以在不修改原有代码的基础上,动态地添加额外的功能(如日志记录、事务管理等)。例如,Spring框架中的AOP功能就是基于代理模式实现的。

二、创建型模式

1. 单例模式(Singleton Pattern)

  • 技术要点

    • 私有构造函数:通过私有构造函数防止外部直接创建实例。

    • 私有静态实例:通过私有静态变量存储唯一的实例。

    • 公有静态方法:通过公有静态方法提供全局访问点。

    • 线程安全:在多线程环境下,需要确保单例的创建是线程安全的。

  • 相关技术

    • Java中的单例模式:可以通过volatile关键字和synchronized关键字来实现线程安全的单例模式。例如,java.lang.Runtime类是单例模式的应用。

    • 双重检查锁定(DCL):在某些语言(如Java)中,可以通过双重检查锁定机制来实现高效的线程安全单例模式。

2. 工厂方法模式(Factory Method Pattern)

  • 技术要点

    • 工厂接口:定义一个工厂接口,包含创建产品的抽象方法。

    • 具体工厂:具体工厂实现工厂接口,负责创建具体的产品。

    • 产品接口:定义一个产品接口,包含产品的公共方法。

    • 具体产品:具体产品实现产品接口,提供具体的功能。

  • 相关技术

    • Java中的工厂方法模式:可以通过接口和类来实现工厂方法模式。例如,java.util.Calendar类通过工厂方法模式创建不同类型的日历对象。

    • 依赖注入(DI):依赖注入框架(如Spring)可以实现工厂方法模式,通过配置文件或注解来管理对象的创建。

3. 抽象工厂模式(Abstract Factory Pattern)

  • 技术要点

    • 抽象工厂接口:定义一个抽象工厂接口,包含多个创建产品的抽象方法。

    • 具体工厂:具体工厂实现抽象工厂接口,负责创建一系列相关的产品。

    • 产品接口:定义多个产品接口,每个产品接口包含一组相关产品的公共方法。

    • 具体产品:具体产品实现产品接口,提供具体的功能。

  • 相关技术

    • Java中的抽象工厂模式:可以通过接口和类来实现抽象工厂模式。例如,java.sql.Connection类和java.sql.Statement类可以通过抽象工厂模式创建不同类型的数据库连接和语句对象。

    • 设计模式框架:在一些设计模式框架中,抽象工厂模式被广泛应用,用于创建一系列相关的产品。

4. 建造者模式(Builder Pattern)

  • 技术要点

    • 建造者接口:定义一个建造者接口,包含多个设置产品属性的方法和一个构建产品的方法。

    • 具体建造者:具体建造者实现建造者接口,负责设置产品的具体属性并构建产品。

    • 产品类:产品类包含多个属性,由建造者构建。

    • 指挥者类:指挥者类负责调用建造者的方法来构建产品,隐藏了产品的构建细节。

  • 相关技术

    • Java中的建造者模式:可以通过接口和类来实现建造者模式。例如,StringBuilder类和StringBuffer类可以视为建造者模式的应用。

    • 流式接口:在一些语言(如Java)中,可以通过流式接口来实现建造者模式,使代码更加简洁易读。

5. 原型模式(Prototype Pattern)

  • 技术要点

    • 原型接口:定义一个原型接口,包含克隆自身的方法。

    • 具体原型:具体原型实现原型接口,提供具体的克隆实现。

    • 深克隆和浅克隆:深克隆会复制对象的所有属性,包括引用类型的属性;浅克隆只复制对象的直接属性,不复制引用类型的属性。

  • 相关技术

    • Java中的原型模式:可以通过实现Cloneable接口和重写clone()方法来实现原型模式。例如,java.lang.Object类中的clone()方法提供了克隆功能。

    • 序列化和反序列化:在某些语言(如Java)中,可以通过序列化和反序列化来实现深克隆。

三、行为型模式

1. 策略模式(Strategy Pattern)

  • 技术要点

    • 策略接口:定义一个策略接口,包含算法的公共方法。

    • 具体策略:具体策略实现策略接口,提供具体的算法实现。

    • 上下文类:上下文类包含一个策略接口的引用,通过调用策略接口的方法来执行算法。

    • 动态切换策略:可以在运行时动态地切换策略,从而改变算法的行为。

  • 相关技术

    • Java中的策略模式:可以通过接口和类来实现策略模式。例如,java.util.Comparator接口可以视为策略接口,通过实现该接口可以定义不同的排序策略。

    • 函数式接口:在Java 8及以上版本中,可以通过函数式接口来实现策略模式,使代码更加简洁易读。

2. 模板方法模式(Template Method Pattern)

  • 技术要点

    • 抽象模板类:定义一个抽象模板类,包含一个模板方法和多个抽象方法。模板方法定义了算法的骨架,抽象方法由子类实现。

    • 具体子类:具体子类继承抽象模板类,实现抽象方法,从而完成具体的算法实现。

    • 钩子方法:在模板方法中可以定义钩子方法,由子类决定是否实现和如何实现。

  • 相关技术

    • Java中的模板方法模式:可以通过抽象类和类来实现模板方法模式。例如,java.util.AbstractList类通过模板方法模式定义了列表的基本操作。

    • 框架设计:在许多框架中,模板方法模式被广泛应用,用于定义框架的基本结构和行为。

3. 观察者模式(Observer Pattern)

  • 技术要点

    • 观察者接口:定义一个观察者接口,包含更新方法。

    • 具体观察者:具体观察者实现观察者接口,提供具体的更新实现。

    • 主题接口:定义一个主题接口,包含注册、注销和通知观察者的方法。

    • 具体主题:具体主题实现主题接口,维护观察者列表,并在状态改变时通知观察者。

  • 相关技术

    • Java中的观察者模式:可以通过接口和类来实现观察者模式。例如,java.util.Observable类和java.util.Observer接口可以用于实现观察者模式。

    • 事件驱动编程:在事件驱动编程中,观察者模式被广泛应用,用于处理事件的发布和订阅。

4. 迭代器模式(Iterator Pattern)

  • 技术要点

    • 迭代器接口:定义一个迭代器接口,包含遍历集合的方法(如hasNext()next())。

    • 具体迭代器:具体迭代器实现迭代器接口,提供具体的遍历实现。

    • 聚合接口:定义一个聚合接口,包含创建迭代器的方法。

    • 具体聚合:具体聚合实现聚合接口,提供具体的迭代器实现。

  • 相关技术

    • Java中的迭代器模式:可以通过接口和类来实现迭代器模式。例如,java.util.Iterator接口和java.util.Collection接口可以用于实现迭代器模式。

    • foreach循环:在许多语言(如Java、C#)中,foreach循环可以方便地使用迭代器模式来遍历集合。

5. 责任链模式(Chain of Responsibility Pattern)

  • 技术要点

    • 处理者接口:定义一个处理者接口,包含处理请求的方法。

    • 具体处理者:具体处理者实现处理者接口,提供具体的处理实现。每个处理者可以将请求传递给下一个处理者。

    • 动态链:可以在运行时动态地构建责任链,从而改变请求的处理顺序。

  • 相关技术

    • Java中的责任链模式:可以通过接口和类来实现责任链模式。例如,java.util.logging.Handler类和java.util.logging.Logger类可以通过责任链模式处理日志请求。

    • 拦截器链:在一些框架(如Spring MVC)中,拦截器链是责任链模式的应用,用于处理请求的拦截和过滤。

6. 命令模式(Command Pattern)

  • 技术要点

    • 命令接口:定义一个命令接口,包含执行命令的方法。

    • 具体命令:具体命令实现命令接口,提供具体的命令实现。

    • 调用者:调用者包含一个命令接口的引用,通过调用命令接口的方法来执行命令。

    • 接收者:接收者包含具体的业务逻辑,由具体命令调用。

  • 相关技术

    • Java中的命令模式:可以通过接口和类来实现命令模式。例如,java.awt.event.ActionListener接口可以视为命令接口,通过实现该接口可以定义不同的命令。

    • 事件驱动编程:在事件驱动编程中,命令模式被广泛应用,用于处理事件的触发和执行。

7. 备忘录模式(Memento Pattern)

  • 技术要点

    • 备忘录接口:定义一个备忘录接口,包含存储和恢复状态的方法。

    • 具体备忘录:具体备忘录实现备忘录接口,提供具体的存储和恢复实现。

    • 发起人:发起人包含一个备忘录接口的引用,通过调用备忘录接口的方法来存储和恢复状态。

    • 管理者:管理者包含一个备忘录接口的引用,用于管理备忘录对象。

  • 相关技术

    • Java中的备忘录模式:可以通过接口和类来实现备忘录模式。例如,java.util.Stack类可以通过备忘录模式来实现状态的存储和恢复。

    • 撤销/重做功能:在许多应用程序中,备忘录模式被用于实现撤销/重做功能。

8. 状态模式(State Pattern)

  • 技术要点

    • 状态接口:定义一个状态接口,包含状态改变的方法。

    • 具体状态:具体状态实现状态接口,提供具体的状

感谢观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小Mie不吃饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值