设计模式GOF23
GOF23是指由设计模式经典名著《Design Patterns: Elements of Reusable Object-Oriented Software》(中译本名为《设计模式——可复用面向对象软件的基础》)的四位作者Erich Gamma、Richard Helm、Ralph Johnson、以及John Vlissides提出的23种设计模式。这四位作者常被称为“四人组”(Gang of Four,简称GOF)。
这23种设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。
这些设计模式不仅能够帮助开发者提高设计的灵活性和代码的重用性,还能使问题的解决方案更加清晰、易于理解。它们被广泛应用在各种软件开发项目中,成为软件开发领域的重要工具和方法。
分类与汇总
分类 | 模式 | 特点 |
---|---|---|
创建型模式 | - | 创建型模式关注于对象的创建过程,它们提供了在创建对象时设计对象间关系的方法。 |
- | 单例模式 | 保证一个类只有一个实例,并提供一个全局访问点。适用于只需要一个对象实例的场景,如配置信息、线程池等。 |
- | 工厂方法模式 | 定义一个用于创建对象的接口,让子类决定实例化哪一个类。适用于创建对象时不需要指定具体类名的场景。 |
- | 抽象工厂模式 | 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。适用于需要创建一组相关对象而不需要指定它们的具体类的场景。 |
- | 建造者模式 | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。适用于需要逐步构建复杂对象的场景。 |
- | 原型模式 | 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。适用于创建新对象成本较大或需要频繁创建对象的场景。 |
结构型模式 | - | 结构型模式关注于类和对象的组合,它们采用继承、聚合等方式组合类和对象以获得更大的结构。 |
- | 适配器模式 | 将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而无法协同工作的类可以一起工作。适用于旧接口与新系统不兼容的场景。 |
- | 桥接模式 | 将抽象部分与实现部分分离,使它们可以独立变化。适用于抽象和实现需要独立变化的场景。 |
- | 组合模式 | 将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和复合对象的使用具有一致性。适用于需要表示对象的部分与整体关系的场景。 |
- | 装饰器模式 | 动态地给一个对象添加一些额外的职责。适用于需要动态地给一个对象增加功能或行为的场景。 |
- | 外观模式 | 为子系统中的一组接口提供了一个统一的高层接口,使得子系统更容易使用。适用于简化复杂系统的接口或降低子系统与客户端之间的耦合度的场景。 |
- | 享元模式 | 运用共享技术有效地支持大量细粒度的对象。适用于系统中存在大量相似对象的场景,通过共享来减少内存占用。 |
- | 代理模式 | 为其他对象提供一种代理以控制对这个对象的访问。适用于需要在访问对象时添加额外功能或控制访问权限的场景。 |
行为型模式 | - | 行为型模式关注于对象之间的通信和协作,它们描述了类或对象怎样交互以及怎样分配职责。 |
- | 模板方法模式 | 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。适用于在父类中定义算法框架,在子类中实现具体步骤的场景。 |
- | 策略模式 | 定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。使得算法可以独立于使用它的客户变化。适用于多种算法或行为需要根据不同情况动态选择的场景 |
- | 状态模式 | 允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。适用于需要在对象内部状态改变时改变其行为的场景。 |
- | 观察者模式 | 定义对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。适用于一个对象状态变化需要通知其他对象的场景。 |
- | 迭代器模式 | 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。适用于需要遍历集合元素的场景,隐藏集合的内部结构。 |
- | 责任链模式 | 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。适用于多个对象需要处理同一请求,且处理顺序可能变化的场景。 |
- | 中介者模式 | 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。适用于系统中对象之间存在大量复杂交互的场景,通过中介者来简化交互过程。 |
- | 访问者模式 | 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。适用于需要对一个对象结构中的对象进行多种不同操作,并且这些操作易于扩展的场景。 |
- | 解释器模式 | 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。适用于需要解释和执行特定语法或表达式的场景,如解析配置文件、编写编译器等。 |
gitee源码
git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git