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