![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
主要介绍python下的常用设计模式
垃圾攻城狮
随缘佛性的垃圾攻城狮
展开
-
设计模式-行为型-模板方法模式
文章目录模板方法模式概述对象适用场景例子模板方法模式概述定义操作中的算法骨架,而将一些步骤延迟到子类实现,使得一个子类不改变算法的结构即可重新定义算法的特定步骤对象抽象类:定义抽象的原子操作(钩子操作);实现一个模板方法作为算法骨架具体类:实现原子操作适用场景一次性实现算法的不变部分各个子类中的公共行为应该被提取出来并集中到一个公共父类中避免代码重复控制子类扩展例子"""设计一个windows程序,桌面开始,绘制,结束"""from abc import ABCM原创 2021-02-28 15:41:15 · 130 阅读 · 2 评论 -
设计模式-行为型-策略模式
文章目录策略模式概述对象例子优点缺点策略模式概述定义一系列算法,把它们一个个封装起来,并且使他们可以相互替换,使得算法可以独立于使用它们的客户而变化对象抽象策略具体策略上下文例子"""策略意图: 定义一系列算法,封装起来,可以相互替换"""from abc import ABCMeta, abstractmethodclass Stategy(metaclass=ABCMeta): @abstractmethod def execute(self, d原创 2021-02-28 14:28:08 · 94 阅读 · 0 评论 -
设计模式-行为型-观察者模式(发布订阅模式)
文章目录责任链模式概述对象适用场景例子优点责任链模式概述定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖他的对象都得到通知并自动更新。又称发布订阅模式对象抽象主题(Subject)具体主题(ConcreteSubject)——发布者抽象观察者(Observer)具体观察者(ConcreteObserver)——订阅者适用场景当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这两者封装在两个独立对象中以使他们可以独立的改变和复用当对一个对象的改变需原创 2021-02-26 14:29:27 · 100 阅读 · 0 评论 -
设计模式-行为型-责任链模式
文章目录责任链模式概述对象例子优点责任链模式概述使得多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合度。这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止对象抽象处理者(Handler)具体处理者(ConcreteHandler)客户端(Client)例子class CPU: def run(self): print("CPU run...") def stop(self): print("CPU原创 2021-02-22 13:31:30 · 68 阅读 · 0 评论 -
设计模式-结构型-外观模式
文章目录组合模式概述对象例子优点组合模式概述为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口是的这一子系统更容易使用对象外观(facade)子系统类(subsystem classes)例子class CPU: def run(self): print("CPU run...") def stop(self): print("CPU stop...")class Disk: def run(se原创 2021-02-19 13:29:31 · 67 阅读 · 0 评论 -
设计模式-结构型-组合模式
文章目录组合模式概述对象适用场景例子优点组合模式概述将对象组合成树形结构以表示“部分和整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性对象抽象组件(Component)叶子组件(Leaf)复合组件(Composite)客户端(Client)适用场景表示对象的“部分与整体”层次结构希望用户忽略组合对象与单个对象的不同,用户统一的使用组合结构中的所有对象例子# 假设存在多个图形,并且可以通过基本图形组合成复合图形from abc import AB原创 2021-02-15 23:24:16 · 76 阅读 · 0 评论 -
设计模式-结构型-代理模式
文章目录代理模式概述对象适用场景例子优点代理模式概述为其他对象提供一种代理以控制对这个对象的访问对象抽象实体(Subject)实体(RealSubject)代理(Proxy)适用场景远程代理:为远程对象提供代理虚代理:根据需要创建很大的对象保护代理:控制对原始对象的访问,用于对象有不同访问对象时例子# 假设我们要进行不同颜色的形状绘制时,我们通常的 # 做法是通过继承的方式分别对不同形状与颜色组合实 # 现类的方式,例如红色矩形,红色矩形继承矩形,矩# 形继承原创 2021-02-10 11:25:10 · 158 阅读 · 0 评论 -
设计模式-结构型-桥模式
文章目录桥模式概述对象适用场景例子优点桥模式概述将一个事物的两个维度分离,使其可以独立的变化对象抽象(Abstraction)细化抽象(RefindAbstraction)实现者(Implementor)具体实现者(ConcreteImplementor)适用场景当事物有两个维度上的表现, 并且在每个维度都有可能扩展时例子# 假设我们要进行不同颜色的形状绘制时,我们通常的 # 做法是通过继承的方式分别对不同形状与颜色组合实 # 现类的方式,例如红色矩形,红色矩形继原创 2021-02-06 15:19:15 · 121 阅读 · 0 评论 -
设计模式-结构型-适配器模式
文章目录适配器模式概述对象实现方式适用场景例子优点适配器模式概述将一个类的接口转换成需要的另一个接口。适配器模式使的原本由于接口不兼容而不能一起工作的类可以一起工作对象目标接口(target)待适配的类(Adaptee)适配器(Adapter)实现方式类适配器: 使用多继承对象适配器:使用组合适用场景想使用一个已存在的类,他的接口不符合要求想使用一些存在的子类,但不可能对每一个子类化以匹配他们的接口,对象适配器可以适配他的父类接口例子from abc impor原创 2021-02-04 14:11:31 · 176 阅读 · 0 评论 -
设计模式-创建型-单例模式
文章目录单例模式概述角色例子优点单例模式概述保证一个类只有一个实例,并提供一个访问他的全局访问点角色单例(Singleton)例子"""还有其他的一些实现方式以及一些更完善的代码结构,这里只是来简单的理解模式概念"""class Singleton: def __new__(cls, *args, **kwargs): if not hasattr(cls, "_instance"): cls._instance = super(Sin原创 2021-02-01 11:58:48 · 92 阅读 · 0 评论 -
设计模式-创建型-建造者模式
文章目录建造者模式概述角色例子优点建造者模式概述将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示建造者模式与抽象工厂模式相似,也用来创建复杂对象,主要区别是建造者模式着重一步步构建复杂对象,而抽象工厂模式着重于多个系列的对象角色抽象建造者(Builder)具体建造者(Concrete Builder)指挥者(Director)产品(Product)例子优点隐藏了一个产品的内部结构和装配过程将构造代码与表示代码分开可以对构建过程进行更精细控制原创 2021-01-29 17:56:41 · 107 阅读 · 0 评论 -
设计模式-创建型-抽象工厂模式
文章目录抽象工厂模式概述角色例子优点缺点抽象工厂模式概述定义一个工厂类接口,让工厂子类来创建一系列相关或者相互依赖的对象相对于工厂方法模式,抽象工厂模式中每个具体工厂都生产一套产品角色抽象工厂角色(Creator)具体工厂角色(Concrete Creator)抽象产品角色(Product)具体产品角色(Concrete Product)客户端(client)例子生产手机,需要手机壳、CPU、操作系统三类对象进行组装,其中每类对象都有不同种类。对每个具体工厂,分别生产生产一原创 2021-01-28 18:32:53 · 73 阅读 · 0 评论 -
设计模式-创建型-工厂方法模式
文章目录工厂方法模式概述角色例子优点缺点工厂方法模式概述定义一个用于创建对象的接口,让子类决定实例化哪一个产品类角色抽象工厂角色(Creator)具体工厂角色(Concrete Creator)抽象产品角色(Product)具体产品角色(Concrete Product)例子优点每个具体产品都对应一个具体工厂类, 不需要修改工厂类代码隐藏了对象创建实现细节缺点每增加一个具体产品类,就必须增加一个相应的具体工厂类...原创 2021-01-26 17:01:28 · 95 阅读 · 0 评论 -
设计模式-创建型-简单工厂模式
文章目录简单工厂模式概述角色例子优点缺点简单工厂模式概述不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例角色工厂角色 (Creator)抽象产品角色 (Product)具体产品角色 (Concrete Product)例子example:优点隐藏对象创建的实现细节客户端不需要修改代码缺点违反单一职责原则,将创建逻辑集成到一个工厂类里违反开闭原则,当添加新产品时需要修改工厂类代码...原创 2021-01-26 16:53:39 · 84 阅读 · 0 评论