![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
spjrual
这个作者很懒,什么都没留下…
展开
-
设计模式(十五)模板方法模式
一、定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤二、角色1.抽象类:定义抽象的原子操作(钩子操作);实现一个模板方法作为算法的骨架2.具体类:实现原子操作三、适用场景1.一次性实现一个算法的不变的部分2.各个子类中的公共行为应该被 提取出来并集中到一个公共父类中以避免代码重复3.控制子类扩展四、示例from abc import ABCMeta, abstractmethodimport time原创 2021-08-20 15:53:21 · 67 阅读 · 0 评论 -
设计模式(十四)策略模式
一、定义定义一系列的算法,把它们一个个封闭起来,并且使它们可相互替换。本模式使得算法可以独立于使用它的客户而变化二、角色1.抽象策略2.具体策略3.上下文三、优缺点1.定义了一系列可用重用的算法和行为2.消除了一些条件语句3.可以提供相同行为的不同实现4.客户端必须了解不同的策略四、示例from abc import ABCMeta, abstractmethod# 抽象策略class Strategy(metaclass=ABCMeta): @abstractmeth原创 2021-08-20 15:41:36 · 78 阅读 · 0 评论 -
设计模式(十三)观察者模式
一、定义定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式又称发布-订阅模式二、角色1.抽象主题(Subject)2.具体主题(ConcreteSubject) – 发布者3.抽象观察者(Observer)4.具体观察者(ConcreteObserver) – 订阅者三、适用场景1.当一个抽象模型有两方面,其中一个方面依赖于另一个方面。将这两者封装在独立对象中以使它们可以各自独立地改变和复用2.当对一个对象的改变需要同时原创 2021-08-19 09:37:42 · 56 阅读 · 0 评论 -
设计模式(十二)责任链模式
一、定义使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合将这些对象连成一条链,并沿着这条链传递这个请求,直到有一个对象处理它为止。二、角色1.抽象处理者(Handler)2.具体处理者(ConcreteHandler)3.客户端(Client)三、优点1.降低耦合度:一个对象无需知道是其他哪一个对象处理其请求四、场景1.有多个对象可以处理一个请求,哪个对象处理由运行时决定2.在不明确接收者的情况下,向多个对象中的一个提交一个请求五、示例from abc import原创 2021-08-19 09:05:42 · 56 阅读 · 0 评论 -
设计模式(十一)代理模式
一、定义为其他对象提供一种代理以控制对这个对象的访问二、角色1.抽象实体(Subject)2.实体(RealSubject)3.代理(Proxy)三、优点1.远程代理:可以隐藏对象位于远程地址空间的事实2.虚代理:可以进行优化,例如根据要求创建对象3.保护代理:允许在访问一个对象时有一些附加的内务处理四、示例from abc import ABCMeta, abstractmethodclass Subject(metaclass=ABCMeta): @abstractm原创 2021-08-19 08:44:06 · 52 阅读 · 0 评论 -
设计模式(十)外观模式
一、定义为子系统中的一组接口摘借 一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用二、角色1.外观(facade)2.子系统类(subsystem classes)三、优点1.减少系统相互依赖2.提高了灵活性3.提高了安全性四、示例class CPU: def run(self): print("cpu start") def stop(self): print("cpu 停止运行")class Di原创 2021-08-19 08:01:58 · 46 阅读 · 0 评论 -
设计模式(九)组合模式
一、定义将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性二、角色1.抽象组件 (Component)2.叶子组件 (Leaf)3.复合组件 (Composite)4.客户端 (Client)三、适用场景1.表示对象的"部分-整体"层次结构(特别是结构是递归的)2.希望用户忽略组合对象与单个对象的不同,用户统一地使用组合结构中的所有对象四、优点1.定义了包含基本对象和组合对象的类层次结构2.简化客户端代码,即客户端可以一致地使用组原创 2021-08-18 09:38:15 · 43 阅读 · 0 评论 -
设计模式(八)桥模式
一、定义将一个事物的两个维度分离,使其都可以独立的变化。二、角色1.抽象 (abstraction)2.细化抽象 (refined abstraction)3.实现者 (abstraction)4.具体实现者 (abstraction)三、应用场景当事物有两个维度上的表现,两个维度都可能扩展时四、优点1.抽象和实现相分离2.优秀的扩展能力五、示例"""时间:作者: Shang ping jian更改记录:重要说明:"""from abc import ABCMe原创 2021-08-18 08:59:49 · 59 阅读 · 0 评论 -
设计模式(七)适配器模式
一、定义将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。二、两种实现方式:1.类适配器:使用多继承示例:# A系统支付用pay方法class Alipay(object): def pay(self, money): print('alipay Payment: %d' % money)# B系统支付用cost方法class BankPay(object): def cost(self, mo原创 2021-08-18 08:27:52 · 69 阅读 · 0 评论 -
设计模式(六)单例模式
一、定义保证一个类只有一个实例,并提供一个访问它的全局访问点优点1.对唯一实例的受控访问2.单例相当于全局变量,但防止了命名空间被污染三、示例"""时间:作者: Shang ping jian更改记录:重要说明:"""class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, "_instance"): cls._instan原创 2021-08-18 08:04:35 · 48 阅读 · 0 评论 -
设计模式(五)建造者模式
一、定义将一个复杂对象的构建与它的表示分享,使得同样的构建过程可以创建不同的表示内容:建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象二、优点1.隐藏了一个产品的内部结构和装配过程2.将构造代码与表示代码分开3.可以对构造过程进行更精细的控制三、角色1.抽象建造者(Builder)2.具体建造者(Concrete Builder)3.指挥者(Director)4.产品(Product)四、示例原创 2021-08-18 07:49:56 · 54 阅读 · 0 评论