23种设计模式

23种设计模式

    • 1、设计模式原则
      • 1.1 单一职责原则
      • 1.2 接口隔离原则
      • 1.3 依赖倒转(倒置)原则
      • 1.4 里氏替换原则
      • 1.5 开闭原则
      • 1.6 迪米特法则
      • 1.7 组合/聚合复用原则
    • 2、模式分类
      • 2.1 创造型
        • 工厂方法模式
        • 抽象工厂模式
        • 单例模式
        • 建造者模式
        • 原型模式
      • 2.2 结构型
        • 适配器模式
        • 桥接模式
        • 组合模式
        • 装饰器模式
        • 外观模式
        • 享元模式
        • 代理模式
      • 2.3 行为型
        • 责任链模式
        • 命令模式
        • 解释器模式
        • 迭代器模式
        • 中介者模式
        • 备忘录模式
        • 观察者模式
        • 状态模式
        • 策略模式
        • 模板方法模式
        • 访问者模式
  • 设计模式代码地址

1、设计模式原则

1.1 单一职责原则

单一职责原则指一个类或模块应该只有一个单一的职责,即只有一个引起它变化的原因。这样做可以使得软件更容易理解、更容易维护和扩展。

1.2 接口隔离原则

接口隔离原则指不应该强迫一个类实现它不需要的接口,即一个类只应该实现它所需要的接口。这样做可以避免不必要的复杂性和依赖性。

1.3 依赖倒转(倒置)原则

依赖倒置原则指高层模块不应该依赖低层模块,它们应该依赖于抽象。具体而言,一个类应该依赖于抽象而不是依赖于具体实现。这样做可以使得软件更加灵活、更容易扩展。

1.4 里氏替换原则

里氏替换原则指程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的。即在使用子类对象的地方可以用父类对象替换,并且不影响程序的正确性。这样做可以使得软件更具有可扩展性和可维护性。

1.5 开闭原则

开放封闭原则指软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。即在不修改已有代码的情况下,通过添加新的代码来扩展软件功能。这样做可以使得软件更容易维护、更容易扩展。

1.6 迪米特法则

也被称为最少知识原则(Principle of Least Knowledge,PLK),这个原则要求我们最小化对象之间的依赖关系。具体来说,一个对象应该只与它直接交互的对象发生通信,而不与其他对象发生通信。这可以减少代码之间的耦合度,提高代码的可维护性和可测试性。

1.7 组合/聚合复用原则

这个原则要求我们尽可能使用组合/聚合关系而不是继承来实现代码的复用。这是因为组合/聚合关系更加灵活,可以更好地适应变化,而且不会导致类之间的紧耦合。


2、模式分类

2.1 创造型

创建型模式处理对象的创建机制,旨在解耦对象的创建和使用。

工厂方法模式

工厂方法模式将有一个抽象工厂类,各类的产品都有各自的工厂类来实现创建,使用者通常不需要知道创建过程,只需要调用具体实现工厂来进行创建,不用直接创建具体产品。

具体实现见工厂方法模式

抽象工厂模式

抽象工厂模式是基于工厂方法模式,他将所有的产品分类为各种产品族,每个产品族中的具体对象由一个抽象工厂来创建,产品族的抽象工厂继承顶级工厂。产品族中的产品由具体工厂来创建。这样在拓展产品族或者产品只需添加一个抽象工厂或者具体工厂。

具体实现见抽象工厂模式

单例模式

单例模式是保证全局只有一个类实例,全局访问点唯一,最常见的是在spring中的bean容器中。

具体实现见单例模式

建造者模式

建造者模式是主要用于复杂对象的创建,使用者不必知道如何去创建这个具体对象,只需要通过建造者进行创建,通常采用链式调用来创建具体对象。

具体见建造者模式

原型模式

原型模式针对于需要经常重复创建的对象,通过对原对象的拷贝实现对象的创建。

具体见原型模式

2.2 结构型

结构型模式关注对象和类的组合形式,以形成更大的系统结构。

适配器模式

适配器模式是对于新拓展的类无法兼容原来的接口,需要通过适配调整来进行兼容,类似于现实生活中的充电转接口。

具体实现见适配器模式

桥接模式

桥接模式主要是对一个复杂对象进行拆解得到不同的类,在将它们桥接起来,减少对象的复杂度。

具体实现见桥接模式

组合模式

组合模式是把对象看为局部和整体,节点对象聚集在一起变成一个复合节点对象。

具体实现见组合模式

装饰器模式

装饰器模式在原有对象的基础上,进行添加装饰,增强其原有对象的能力。

具体实现见装饰器模式

外观模式

外观模式是为子系统提供一个更高层次的接口,使用者不需要考虑子系统的内部复杂的情况,就能够非常容易的使用子系统。

具体实现见外观模式

享元模式

享元模式是为了节省空间和性能,在需要重复创建同一个对象,可以将对象持久化,再次使用直接取出,不需要进行重复创建。

具体实现见享元模式

代理模式

代理模式是为了保护被代理对象,全局访问被代理对象只能通过代理对象,代理对象能够对被代理对象进行增强。在spring的aop中有广泛使用。

具体实现见代理模式

2.3 行为型

行为型模式关注对象之间的通信以及如何实现运行时算法的不同策略。

责任链模式

责任链模式是将请求沿着处理链进行传递,直到遇到可以处理的链才进行处理。

具体实现见责任链模式

命令模式

命令模式将请求者和接收者进行分离,将请求参数化,通过命令对象来实现,由命令对象向接收者进行发送实质性的请求。

具体实现见命令模式

解释器模式

解释器通常用来解释一种语言或者表达式。类似于Redis命令,或者是低代码的前端解释成超文本标签。

具体实现见解释器模式

迭代器模式

迭代器模式是为防止暴露对象的内部结构,实现对对象内部的数据迭代。

具体实现见迭代器模式

中介者模式

中介者模式是为了解耦不同对象之间的通信,发送者不用在意接收者对象的细节,只需要通过中介者间接和接受者进行通信。

具体实现见中介者模式

备忘录模式

备忘录模式是为了保存对象的状态,从而能够实现回溯到之前的状态。

具体实现见备忘录模式

观察者模式

观察者模式是由观察者和被观察者组成实现,观察者负责鉴定被观察者的行为。发布订阅模式是基于观察者模式的。

具体实现见检查者模式

状态模式

将对象的行为和状态分离,在改变状态时同时改变自己的行为。

具体实现见状态模式

策略模式

策略模式是将行为和算法单独封装成一个类,在使用的时候能够随时切换它们,无需更改它们的代码。

具体实现见策略模式

模板方法模式

模板方法模式是将对象的算法内部行为顺序规定好,行为延迟到子类来实现。

具体实现见模板方法模式

访问者模式

访问者模式将算法和数据结构分离开,使得算法可以任意改变,不影响数据结构。

具体实现见访问者模式

设计模式代码地址

https://github.com/guopeizhun/design_mode

你可能感兴趣的:(设计模式,java,开发语言)