通俗的理解设计模式-23种设计模式

设计模式的七大原则

  1. 开放-封闭原则
    通俗:对扩展开放,对修改关闭

  2. 单一职责原则
    通俗:一个类只做一件事

  3. 依赖倒转原则
    通俗:程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,而不要用具体类来做这些事情。

  4. 迪米特法则(最少知道原则)
    通俗:高内聚,低耦合。类对自己依赖的类知道的越少越好。

  5. 接口隔离原则
    通俗:最小的接口, 互不关联的接口独立出来减少依赖

  6. 合成/聚合复用原则
    通俗:避免使用继承,要尽量使用合成聚合。燕群类通过燕类聚合而成,燕类通过翅膀类等等合成

  7. 里氏代换原则
    通俗:子类不能去修改父类的功能

创建型模式(5种)

作用: 用于创建对象

单例模式【重要】

确保一个类最多只有一个实例,并提供一个全局访问点,注意线程安全。

https://blog.csdn.net/weixin_43956958/article/details/123181421

工厂模式【重要】

简单工厂模式,手机工厂可以生产小米手机和华为手机,通过传入参数生产出不同的手机实例
工厂方法模式,两个手机工厂,小米手机工厂中有一个生产方法,华为手机中也有个同样的生产方法,需要生产什么手机就实例化什么工厂,然后再调用生产方法。
两者区别:在扩展新功能的时候,简单工厂模式要修改工厂类,工厂方法模式是只需要修改客户端

抽象工厂模式【重要】

工厂方法只考虑生产同种类的产品,抽象工厂考虑的是多种类的产品,由此可以看出抽象工厂模式是工厂方法模式的升级版本。
抽象工厂模式(Abstract Factory) 是以一个超级工厂创建其他工厂。
抽象工厂:家电超级工厂;
具体工厂:空调工厂、电视工厂,洗衣机工厂;
抽象产品:空调产品,电视产品,洗衣机产品;
具体产品:格力空调、美的空调;长虹电视,小米电视;格力洗衣机、美的洗衣机;

要实例化小米电视类时,先获取电视工厂,由电视工厂创建小米电视具体产品

建造者模式【重要】

建造联想到建房子,首先挖地基,然后建墙体,然后盖房梁,最终得到一个完整的房子。
所以:建造模式就是按照一定顺序(指挥着)构建(抽象建造者->具体建造者复杂对象产品)的模式。
通常我们的链式写法,最后得到一个对象,差不多就是一个建造者模式

原型模式

用一个已经创建的实例作为原型,来创建一个与原型对象相同的新对象
注意:原型模式中所需要非常重要的手段就是克隆

提供者模式

虽然这个模式叫做“提供者模式”,提供者包含了策略模式(Strategy)和工厂方法(Factory Method)设计思想。

// 抽象提供者接口
public interface IDataProvider
{
    void GetData();
}

// 具体的提供者A
public class DataProviderA : IDataProvider
{
    public void GetData()
    {
        Console.WriteLine("Using DataProviderA to get data.");
    }
}

// 具体的提供者B
public class DataProviderB : IDataProvider
{
    public void GetData()
    {
        Console.WriteLine("Using DataProviderB to get data.");
    }
}

// 客户端代码
public class Client
{
    private readonly IDataProvider _dataProvider;

    public Client(IDataProvider dataProvider)
    {
        _dataProvider = dataProvider;
    }

    public void ProcessData()
    {
        _dataProvider.GetData();
        // 处理数据的逻辑...
    }
}

// 使用示例
public class Program
{
    public static void Main(string[] args)
    {
        IDataProvider dataProviderA = new DataProviderA();
        Client clientA = new Client(dataProviderA);
        clientA.ProcessData();

        IDataProvider dataProviderB = new DataProviderB();
        Client clientB = new Client(dataProviderB);
        clientB.ProcessData();
    }
}

结构型模式(7种)

作用: 类和对象之间的组合

适配器模式【重要】

看到适配器我们通常想到转换器,例如将手机充电器接口统一转化成标准的type-c
将杂乱的接口适配成统一的接口,将不兼容的接口适配成标准的接口,主的目的是兼容

案例:系统中有一套密码加密算法,版本升级后,使用了另一种第三方提供的加密算法,两套不兼容,在不改变原有代码结构基础之上,将新的加密算法集成进去。这时我们可以写一个适配器(包含原来加密调用的方法),将原加密参数经过适配/修改后调用新加密算法,从而返回新的加密字符串。

使用场景:

  • 统一多个已存在类的相同操作,例如mysql查询getone()、sqlite的查询getres()
  • 新老版本的方法兼容
  • 包装有缺陷的接口

装饰器模式

代理模式【重要】

桥接模式

外观模式【重要】

外观模式,也叫门面模式,只看到外面的不能看到里面的。
一个复杂的子系统,经过一层或多层门面封装,只对外提供简单的功能,复杂的逻辑由系统内部各个子类实现。

案例:家庭影院系统,由DVD、投影仪、灯光、大屏幕、音响等子系统组成(子系统的集合),各子系统给遥控器(外观类)提供接口,然后遥控器给人们(调用者)提供简单的操作服务。

应用场景:

  • 子系统越来越复杂,增加门面模式提供简单接口
  • 构建多层系统结构,利用门面对象呢作为每层的入口,简化层间调用。

组合模式【重要】

享元模式

行为型模式(12种)

作用: 特别关注模块之间的通信,多个类或对象之间怎样相互协作共同完任务

策略模式【重要】

观察者模式【重要】

模板方法模式

迭代器模式【重要】

责任链模式【重要】

命令模式【重要】

备忘录模式

状态模式

访问者模式

中介者模式【重要】

解释器模式

其他非经典设计模式

MVC模式

AOP模式

中间件模式(管道模式)

管道模式: 是一个责任链模式常用变体. 一个数据按一个顺序经过管道节点处理后输出,上一个节点的输出为下一个节点的输入.
中间件模式: 是管道模式的一个特例. 需要处理数据进入管道和出来管道的数据.

附录

设计模式的Python3.X版本
python 23种常用模式设计总结

此处评论已关闭