![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
清风予你
实践与理论结合,每天进步一点!!!个人遇到问题记录!
展开
-
责任链模式
官方定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。代码实现有点问题import abc# 逻辑乱# 抽象类定义方法# 具体类实现# 日志定义等级,符合日志等级则打印。不符合则传递给下一个类。#class AbstractL原创 2022-01-04 21:31:48 · 148 阅读 · 0 评论 -
中介模式-python
中介模式:在中介者模式中,对象间的通信过程被封装在一个中介者(调解人)对象之中。 对象之间不再直接交互,而是通过调解人进行交互。 这么做可以减少可交互对象间的依赖,从而降低耦合。何时使用:多个类相互耦合,形成了网状结构。如何解决:将上述网状结构分离为星型结构。class ChatRoom(): @staticmethod def display_message(user, message): print("{0} say {1}".format(us原创 2021-12-26 20:45:16 · 369 阅读 · 0 评论 -
proxy代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。值得注意的是,代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。import abcclass Subject(metaclass=abc.ABCMeta): @abc.abstractmethod def request(self): passclass RealSubject(Subject): def原创 2021-12-19 20:51:46 · 188 阅读 · 0 评论 -
模板设计模式
定义:模板方法模型是一种行为设计模型。模板方法是一个定义在父类别的方法,在模板方法中会呼叫多个定义在父类别的其他方法,而这些方法有可能只是抽象方法并没有实作,模板方法仅决定这些抽象方法的执行顺序,这些抽象方法的实作由子类别负责,并且子类别不允许覆写模板方法。注意点:1,父类定义模板方法某些操作顺序。2,子类不能覆盖父类模板方法把具体的实现放在子类中实现import abcclass Game(metaclass=abc.ABCMeta): def __init__(sel原创 2021-12-12 21:55:03 · 1560 阅读 · 0 评论 -
迭代器模式
百科定义:在面向对象编程里,迭代器模式是一种设计模式,是一种最简单也最常见的设计模式。它可以让用户透过特定的接口巡访容器中的每一个元素而不用了解底层的实现。代码实现:class Iter(): context = ["A", "B", "C", "D", "F"] def __init__(self, begin, end): self.index = begin self.end = end def __iter__(self)..原创 2021-12-05 22:02:15 · 292 阅读 · 0 评论 -
命令设计模式
官方定义:命令模式是一种行为设计模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。核心:将函数封装为对象。封装后请求就可以存储。实际看来,命令模式在代码实现中,对于函数式编程语言,类似与回调函数传参,对于非函数式编程语言,由于无法将函数作为参数传递,将函数封装为一个对象的方法,传递对象来实现传递不同的命令。按照代码的实现形式,和策略模式类似,但是策略模式是不同算法的实现相同的目的...原创 2021-11-28 20:53:16 · 122 阅读 · 0 评论 -
抽象工厂模式
简单工厂:一个工厂类,一个产品抽象类。 工厂方法:多个工厂类,一个产品抽象类。 抽象工厂:多个工厂类,多个产品抽象类。 # 抽象产品,具体产品,工厂# 抽象工厂,一个工厂有多个产品import abcclass Factory(metaclass=abc.ABCMeta): def create_phone(self): pass def create_compute(self): passclass Phone(met...原创 2021-11-07 11:19:44 · 55 阅读 · 0 评论 -
工厂设计模式
解决一个工厂类耦合了大量类的创建# 抽象产品,具体产品,工厂# 专卖手机店,专卖本品牌手机。import abcclass Phone(metaclass=abc.ABCMeta): def call(self): pass def do_explore(self): passclass MiPhone(Phone): def call(self): print("小米手机打电话") def do_e原创 2021-11-07 11:03:55 · 1612 阅读 · 0 评论 -
简单工厂模式
一个工厂类收录了所有的类创建逻辑,让用户不需要关心类的创建,只专注与类的使用。# 抽象产品,具体产品,工厂# 手机店,可以卖各种手机。import abcclass Phone(metaclass=abc.ABCMeta): def call(self): pass def do_explore(self): passclass MiPhone(Phone): def call(self): print("小米原创 2021-11-07 10:55:55 · 48 阅读 · 0 评论 -
适配器模式
适配器模式:常见的就是电力转换街头.日常生活中普通的插座头式小插孔,空调的插口头却是大的,夏天太热了,为了使用空调,必须得买个插座来转换下.# 普通家用插座提供小孔的插座,空调则需要使用大孔的插座。# 当我想使用空调时怎么办,买个适配插座。将两个衔接起来class GeneralSocket(object): def __init__(self, name=None): if name is None: self.name = "ordin原创 2021-10-24 22:33:25 · 61 阅读 · 0 评论 -
单例模式pattern
干什么:创建全局唯一的实例.情形:1.需要频繁的创建和销毁对象.消耗巨大.2.节省系统资源比如如 I/O 与数据库的连接.原创 2021-10-24 20:24:07 · 2331 阅读 · 0 评论 -
策略模式strategy
在运行时根据条件变化策略# encoding: utf-8# 在执行的时候,能够根据子类的类型去执行子类当中的方法# 继承情形中,所继承的方法在子类中实现,如果在父类实现,相当于多余,因此出现了抽象类# 抽象类:部分,有未实现的抽象方法,但是非抽象方法依旧实现了功能。# 接口类:完全未实现方法体,只有抽象方法的抽象类class Animals(object): def __init__(self): pass def say(self):原创 2021-10-17 20:39:19 · 76 阅读 · 0 评论 -
反射模式python
百科定义:在计算机学中,反射式编程(英语:reflective programming)或反射(英语:reflection),是指计算机程序在运行时(runtime)可以访问、检测和修改它本身状态或行为的一种能力。[1]用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。要注意术语“反射”和“内省”(type introspection)的关系。内省(或称“自省”)机制仅指程序在运行时对自身信息(称为元数据)的检测;反射机制不仅包括要能在运行时对程序自身信息进行检测,还要求程序能进一原创 2021-10-10 22:03:43 · 757 阅读 · 0 评论 -
订阅与发布模式
维基百科:在许多发布/订阅系统中,发布者发布消息到一个中间的消息代理,然后订阅者向该消息代理注册订阅,由消息代理来进行过滤。消息代理通常执行存储转发的功能将消息从发布者发送到订阅者。与观察者模式的区别:1.发布者与订阅者无法相互感知,双方无法知道对方是谁.2,非实时传递信息,信息可以储存到一定时间再传递到订阅者.3,发布订阅模式常用于不同的交互模块.比如消息队列.4,接收者可能会接收到不同类别的消息.可以自定义接收信息.而观察者模式一旦有状态变化,则所有的观察者都要接收.观察不是一种原创 2021-09-22 23:39:18 · 540 阅读 · 0 评论 -
观察者模式
"红灯停,绿灯行" 日常中常见的信号系统就是观察者模式的实际映射,这里交通灯是被观察者,也就是subject,各种开车的比如出租车司机,货车,行人都是观察者。在软件世界中也有这样的概念,一个对象的状态变化会改变一个或多个对象的状态。我们称之为观察者模式。实际代码中遇到的如:1.vue中数据双向绑定,父子组件消息传递。2,微信公众号的订阅模式。关键点:定义观察者:# encoding: utf-8# 观察者class Driver(object): def __init原创 2021-09-21 00:15:24 · 120 阅读 · 0 评论 -
设计模式之装饰模式(Decorator)
转自:http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/24/2516112.html.初始装饰模式: 在进行OO编程的时候,大家一定遇到过类似的情况:那就是“销售人员的固化问题”,即现在有这样一种销售人员类:化妆品销售人员,他具有销售方法,现在要让让化妆品销售人员可以进行化妆和打扫卫生的功能,怎么实现呢?如果按照转载 2017-07-22 22:01:16 · 169 阅读 · 0 评论 -
设计模式之代理模式(Proxy)
1.初识代理模式 生活中大家一定遇到这样的情况了:比如说我要买一条毛巾,不妨就是洁丽雅的吧,那一般人的话我应该不是去洁丽雅的工厂里面直接去买吧,而是我们在洁丽雅专卖店或者什么超市啊,这些地方购买,这些地方实际上就是洁丽雅毛巾的代理。这其实和我们OO中的代理模式是很相似的。 一个it人士,上网应该是经常的事了吧,那么总会有这样的情况,打开一个网页,文字先出现,而那些比较大的资源,转载 2017-07-22 22:08:40 · 212 阅读 · 0 评论 -
设计模式之简单工厂模式(Simple Factory)
今天呢,要学习的设计模式是“简单工厂模式”,这是一个实现起来比较简单的设计模式,但是确是经常使用的设计模式,同时呢,使用简单工厂模式好处也是比较多的。可以说学习了这个模式性价比还是比较高的。1.宏观理解简单工厂模式 想来想去,还是觉得这个例子比较好:现在要完成一个计算器的功能,要求输入两个数A,B和一个运算符号(+,-,*,%),能够输出运算结果。注意哦,我们这里说的是面向对象的转载 2017-07-22 22:23:44 · 312 阅读 · 0 评论 -
设计模式之单例模式(Singleton)
转自:http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/14/2498940.html1.什么是单例模式在现实生活中存在着有这样的特点的一些类: A.这些类只能有一个实例; B.这些能够自动实例化; C.这个类对整个系统可见,即必须向整个系统提供这个实例。不妨举一个具转载 2017-07-19 23:11:35 · 171 阅读 · 0 评论 -
设计模式之原型模式(Prototype)
1.初识原型模式 大家都知道连锁机构是现在灰常流行的商业模式,比如咖啡之翼,那么假设咖啡之翼要在长春新建立一个分店,所经营的产品和以前在其他的城市已经存在的店经营的产品差不多,那么面向对象开发的角度怎么解决这个问题呢?难道要重新的实例化一个咖啡之翼的店??这显然不太好吧,咖啡之翼里面经营的产品(假设是属性吧)都需要重新写,这就是在做大量的重复工作啊,这显然是不符合OO开发思想的转载 2017-07-21 17:21:11 · 167 阅读 · 0 评论