23种设计模式
文章平均质量分 58
Sean_TS_Wang
不尝试永远不知道,想改变什么时候都不晚
展开
-
23种设计模式(Python实现)
23种设计模式(Python实现原创 2021-11-15 16:20:45 · 952 阅读 · 2 评论 -
访问者模式
简介题外话:这是要写的23种设计模式的最后一种,还没写完的时候,总想着赶紧写赶紧写,现在马上就要写完了,感觉时间过得好快啊,为了写这个系列花了三个月的时间,不过也将这块硬骨头啃下来了,值得记录一下。访问者模式,被誉为最复杂的设计模式,一般都用不上,刚开始接触的时候,确实是无法理解为什么要这么设计(来回套娃),感觉是为了封装而封装。下面我们来看看这个访问者模式是怎么套娃的吧。正文样例demoimport randomclass Interviewee: def __..原创 2021-11-02 19:49:47 · 137 阅读 · 0 评论 -
策略模式
简介说到策略,我第一个想到的就是诸葛亮的精囊妙计,诸葛亮给了赵云三个精囊,虽说每个精囊中的方法不同,但是开精囊的这个动作是相同的,策略模式就是将开锦囊的动作提取出来,每次只负责开锦囊,但是具体开哪个精囊是可以随时切换的。正文策略模式主要实现两个类,一个是上下文管理器,另一个是策略,下面我们用个例子演示一下class Scheme: def play(self): print("发动计谋")class FireScheme(Scheme): def.原创 2021-10-28 20:00:38 · 117 阅读 · 0 评论 -
状态模式
简介写文之前,还是依旧去网上转了一圈,发现状态模式和责任链模式有些相似的地方,所以今天我们就来讲讲二者之间的区别。正文总结原创 2021-10-27 17:37:35 · 115 阅读 · 0 评论 -
简单工厂模式和工厂模式
简介本文主要理清简单工厂模式和工厂模式的区别目录简介目录正文简单工厂模式(便利店模式)工厂模式总结正文简单工厂模式(便利店模式)简单工厂只有一个总工厂,在客户端不知道具体要生成什么产品的时候,只需要将产品名称交给总工厂,总工厂就能自动判断需要生成什么产品。简化场景:场景一:今天你进入便利店,想买一杯泡面,但是你不知道泡面在哪个货架,于是你就问便利店老板(总工厂),便利店老板帮你找到了泡面。 场景二:每次便利店有上新品的时候,便利店老板只需要更新商品。你可原创 2021-08-07 17:35:10 · 477 阅读 · 0 评论 -
抽象工厂模式
简介上一篇推文https://blog.csdn.net/Sean_TS_Wang/article/details/119487991简单工厂模式和工厂模式,我们区分了两种工厂的不同,以及适用场景。这篇文章主要区分一下工厂模式和抽象工厂模式的不同点目录简介目录正文简化场景面向函数实现抽象工厂实现对比工厂模式总结正文上一篇的工厂模式中提到,每个产品对应着一个子工厂,每次添加一种新产品,不仅需要新增一个产品类,还需要新增一个子工厂类。但是现实生活中,..原创 2021-08-09 11:03:36 · 268 阅读 · 0 评论 -
建造者模式
简介上一篇抽象工厂模式中,我们提到了,在一个工厂生产多种产品的时候,可以使用抽象工厂模式将工厂和产品之间的对应关系一一封装起来。从而达到随意扩张工厂或者产品(只能二选一)的目的。但是如果想要工厂和产品两个都能随意扩张,则需要同时修改抽象工厂方法,这就违背了我们的开闭原则。因此提出建造者模式来应对复杂的构造模式。正文建造者模式解释:将一个复杂对象的构建与它的表示进行分离,使得同样的构建过程可以创建不同的表示下面列举一个简单的例子:class Food: name .原创 2021-08-12 10:38:38 · 130 阅读 · 0 评论 -
单例模式
简介单例模式,顾名思义,就是只有一个实例的模式。目的是为了减少实例多次创建和销毁的消耗。作用类似于全局变量。实际上,单例模式就是扩展了全局变量。目录简介目录正文创建实例实现单例加锁import实现线程安全的单例模式正文创建实例Python __init__()方法常用于初始化一个实例,而创建实例则很少被用到。要想知道单例模式是怎么创建的,首先需要知道Python是怎么创建一个实例的。Python提供了一个__new__()方法用于创建实...原创 2021-08-17 10:37:18 · 161 阅读 · 0 评论 -
原型模式
简介正文原创 2021-08-18 10:33:05 · 143 阅读 · 0 评论 -
适配器模式
简介今天你的手机没电了,想要充电,只有type-B的充电线,但是手机是typy-c的接口。怎么办呢?于是转换插头就出现了。适配器模式就是实现一个转化器的作用,使得接口能够和用户的调用适配。正文关系图实现方式继承重写class ProductA: def type_c(self): print("这是一个type-c输出")class ProductB(ProjectA): def type_c(self): ...原创 2021-08-28 09:06:47 · 180 阅读 · 0 评论 -
桥接模式
简介桥接,顾名思义,用一座桥链接,将强耦合的对象进行解耦,并且使用桥来实现解耦后的关系连接。正文先来简单看一下应用场景:可以看出两个组对象之间一共对应着六种联系,我们需要按照实际需求将这六种关系一一实现。但是问题来了,如果对应关系很多怎么办?,而且每次添加一个组对象,则需要将其所有的对应关系一一实现。难度是几何倍数增长。于是我们想能不能用一种方法,将二者串联起来。就像下面这样。我们不需要实现每种对象之间的关联,而是将对象之间的组合关系交给用户选择,我们只需要搭建一个平台,原创 2021-08-31 08:13:33 · 151 阅读 · 0 评论 -
组合模式
简介正文总结原创 2021-09-06 13:21:57 · 131 阅读 · 0 评论 -
装饰器模式
简介看到装饰会想到啥,蛋糕上的裱花?礼物盒上的蝴蝶结?还是礼帽上的羽毛?这些小东西并不是必要的,蛋糕可以没有裱花,礼物盒可以没有蝴蝶结,礼帽可以没有羽毛。但是添加了这些小东西,却可以让同一个物品展现出不同的模样。不同的裱花可以做出不同样式的蛋糕,不同的蝴蝶结也可以让礼物盒展现出不同的样式,不同的羽毛可以让礼帽表达不同的意思。装饰器模式的设计理念就是为已经存在的对象添加装饰正文装饰器模式看过简介的描述,我们可以知道,装饰器模式和类的继承是不一样的,因为装饰器具有以下几点特点.原创 2021-09-11 10:44:07 · 99 阅读 · 0 评论 -
外观模式
简介在介绍外观模式之前,先问大家一个问题,还有人记得适配器模式吗?不记得的大兄弟可以瞅一眼:适配器模式_Sean_TS_Wang的博客-CSDN博客其中适配器的设计理念是在存在不合适的接口的情况下,将该接口封装,为用户提供一个合适的接口。外观模式和适配器模式有些相像,也是需要为原有的接口封装一个外观交由用户操作。但是不同的是,在适配器模式下,USB接口封装完之后还是USB接口,但是经过外观模式封装后,USB接口会变成一个手机。因为外观模式的设计理念是,将复杂的操作封装成一个简单的界面.原创 2021-09-16 09:18:00 · 114 阅读 · 0 评论 -
享元模式
简介享元模式,字面上的意思是分享元始数据,看起来和原型模式好像有些类似。但是实际上两者是不相同的。原型模式是在已有的基础上进行深拷贝,生成一个全新的对象,对于这个全新的对象,我们可以随意修改。享元模式则不然,享元模式对于同一种类型的实例,只会生成一个实例对象,区别只是实例对像的属性会有所改变。举个例子:游戏中有很多树木场景,如果为每棵树都生成一个实例对象,那么一个地图中则需要生成成百上千个树实例,这严重的增加了系统的消耗。正文总结...原创 2021-09-20 17:33:31 · 116 阅读 · 0 评论 -
代理模式
简介正文总结原创 2021-09-29 10:27:31 · 123 阅读 · 0 评论 -
中介者模式
简介中介者,在现实生活中,我们常常会遇到这种角色,例如买房,租房,设置求职的时候。往往这种角色起到的就是一个搭建桥梁的作用,两个对象的交互链接起来,听起来有点像桥接模式,但是实际上和桥接模式还是有所区别的。其中最明显的特点就是:中介者模式可以让两个实体互相通信,而桥接模式只能让两个实体的属性相互组合。正文在上一篇推文中我们介绍了代理模式,每个客户端都可以在杂货店打酱油,但是如果想要在杂货店中买到泡面,我们应该怎么修改我们的程式呢下面我们来看一下杂货铺是如何代理多个商品的cl.原创 2021-10-07 19:55:58 · 230 阅读 · 0 评论 -
责任链模式
简介今天解决了一个目录正文总结原创 2021-08-07 11:02:07 · 264 阅读 · 0 评论 -
观察者模式
简介观察者模式,首先设置一个观察者,针对某些事件或者对象进行观察。通过观察,观察者可能会做出一些反应,也可能不会。比如果保安观察监控,平常用户出入保安不会有反应,一旦发现小偷,保安就要立即做出相应的举动。正文观察者模式,也被称为订阅发布模式,主要有两种模式,拉模式和推模式,接下来我们演示一下:拉模式:class Subscribed: '''被订阅对象''' def __init__(self) -> None: self.observer.原创 2021-10-20 18:52:18 · 231 阅读 · 0 评论 -
模板模式
简介模板模式算是我们最常用的一种设计模式了,同时也是最容易理解的一种设计模式。可能大家平常都在使用,但是并不知道其实这是一种设计模式。下面就来讲讲自己关于模板模式的一些理解正文问题一: 什么是模板模式?简单来说就是为一个功能先创建一个模板,之后每次调用就不需要重新实现这个功能了,听起来很熟悉对不对,对于相同的功能先写一个函数,之后每次遇到相同的操作直接调用函数就可以了。对于面向对象来说,这种模式的实现就更好理解了,父类创建一个方法,所有的子类都可以调用了。问题二:模板模..原创 2021-10-09 15:23:07 · 202 阅读 · 0 评论 -
解释器模式
简介解释器模式,简单来说就是一种翻译机,将我们听到的英文翻译成中文。那么这和我们之前提到的适配器模式有什么不同呢?下面我们来对比一下二者的区别正文首先,我先从以前的文章从贴过来一段适配器模式的代码实现class ProductA: def type_c(self): print("这是一个type-c输出") class ProductB(ProjectA): def type_c(self): print("经..原创 2021-10-11 20:00:56 · 100 阅读 · 0 评论 -
命令模式
简介场景一:开发人员将火箭发射程式写入发射系统,指挥官深吸一口气,按下红色按钮,“10.9.8.7.6.5.4.3.2.1。点火,发射,助推器分离,一级火箭关机,一二级火箭分离,抛整流罩,二级火箭关机、分离,三级火箭一次关机,二次点火、二次关机,星箭分离,卫星太阳翼展开,火箭发射成功。“场景二:进入餐厅,打开菜单,仔细阅览,然后招来服务员,“我要这个,这个还有这个”。服务员接到订单后转交给厨房,厨房开始备菜,过了一段时间陆续出菜,再次由服务员转交。正文上面两个常见都是比较经典的命令..原创 2021-10-16 14:49:07 · 151 阅读 · 0 评论 -
备忘录模式
简介备忘录模式,百度了很多文章,大多都是说在不违背对象封装完整性的前提下,保存对象的状态,然后可以进行状态的回滚,因此又称为快照模式。但是个人又有一些小疑问,希望各路大佬可以一起讨论一下正文问题一:备忘录模式和享元模式的区别用法区别备忘录模式是将历史状态保存,直接在原有状态上修改。因此每次修改都可以回滚,但是不能合并享元模式是新建一个一模一样的对象,在全新的对象上进行修改。因此可以合并,回滚也只是切换消耗区别备忘录模式只能保存对象的状态,不能直接保存对象的实例,尝.原创 2021-10-20 14:01:26 · 208 阅读 · 0 评论 -
迭代器模式
简介参考链接:Python3 列表解析和迭代器的内存占用过程分析_Leon的博客-CSDN博客迭代器,在Python类中实现__iter__()就是一个可迭代对象,如果同时实现了next()就是一个迭代器。正文其实不是很能理解为什么要使用迭代器模式很多网上的文章,都说可以节省内存。在和朋友激烈的讨论之后,得出以下结论。迭代器只有在无中生有的情况下才会节省空间。举个例子,斐波那系数,每一个next都是上两个数相加得到的,如果我们需要第9个数,则需要next 9次,但是前8次的内.原创 2021-10-18 20:32:15 · 132 阅读 · 0 评论