通俗的理解设计模式-23种设计模式
设计模式的七大原则
-
开放-封闭原则
通俗:对扩展开放,对修改关闭 -
单一职责原则
通俗:一个类只做一件事 -
依赖倒转原则
通俗:程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,而不要用具体类来做这些事情。 -
迪米特法则(最少知道原则)
通俗:高内聚,低耦合。类对自己依赖的类知道的越少越好。 -
接口隔离原则
通俗:最小的接口, 互不关联的接口独立出来减少依赖 -
合成/聚合复用原则
通俗:避免使用继承,要尽量使用合成聚合。燕群类通过燕类聚合而成,燕类通过翅膀类等等合成 -
里氏代换原则
通俗:子类不能去修改父类的功能
创建型模式(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种常用模式设计总结
最后更新于 2023-07-25 16:24:01 并被添加「」标签,已有 570 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭