![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式、开发原则
设计模式、开发原则
蓝绿色~菠菜
对技术有一颗敬畏和严谨之心,对代码有精益求精的精神。像养小孩和女朋友一样,精心照料和打扮。想清楚了再干,坚持高标准,Design for future!
展开
-
事件溯源模式
事件溯源(Event Sourcing)是一种设计模式,其核心思想是将系统的状态变化表示为一系列不可变的事件,并将这些事件存储在事件日志中。系统的当前状态可以通过重新应用(回放)这些事件来还原,从而实现状态的追溯。大多数应用程序会使用数据,而典型的方法是用户使用数据时通过立即更新数据使应用程序保持数据的当前状态。例如,在传统的创建、读取、更新和删除 (CRUD) 模型中,典型的数据处理是从存储读取数据、对其作出修改、使用新值更新数据的当前状态。原创 2023-11-23 11:55:07 · 239 阅读 · 0 评论 -
软件开发六大设计原则
一、单一职责原则(Single Responsibility Principle,SRP)解释:应该有且仅有一个原因引起类的变更。一个接口或类只有一个原因引起变化,也就是一个接口或类只有一个职责,它就负责一件事情。举例:一个视频播放软件,包含一个播放器类,这个类包含视频播放接口和音频播放接口,显然这样的设计是不符合SRP原则的。因为音频播放和视频播放需求的修改都会导致播放器这个类的结构发生改变。符合单一原则的设计是,将视频播放单元和音频播放单元各建一个类,播放器类继承这两个类,构成客户端。原创 2020-08-11 21:27:54 · 1282 阅读 · 1 评论 -
浅谈Python设计模式 -- 观察者模式
观察者模式:也叫发布-订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得当该对象状态改变时,所有依赖于它的对象都会得到通知,并被自动更新。观察者模式的通知方式可以通过直接调用等同步方式实现(如函数调用,HTTP接口调用等),也可以通过消息队列异步调用(同步调用指被观察者发布消息后,必须等所有观察者响应结束后才可以进行接下来的操作;异步调用指被观察者发布消息后,即可进行接下来的操作。)...原创 2020-01-03 13:19:13 · 296 阅读 · 1 评论 -
浅谈Python设计模式 -- 策略模式
策略模式:要完成一个任务,但完成任务有多种方式A、B、C,那么可以定义一组算法,将每个算法都封装起来,分别对应每个方式A、B、C,并使他们之间可互换。实例:如现在超市前台付款方式,会常遇到刷卡、某宝支付、某信支付等方式。公司有新产品上线,需要通知客户,通知方式有:短信通知、邮件通知。代码:假设某司维护着一些客户资料,需要在该司有新产品上市或者举行新活动时通知客户。现通知客户...原创 2020-01-03 10:37:41 · 616 阅读 · 1 评论 -
浅谈Python设计模式 -- 解释器模式
解释器模式:给定一种语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。典型的解释器模式中会有终结符和非终结符之说,语法也根据两种终结符,决定语句最终含义。实例:要开发一个自动识别谱子的吉他模拟器,达到录入谱即可按照谱发声的效果。除了发声设备外(假设已完成),最重要的就是读谱和译谱能力了。分析其需求,整个过程大致上分可以分为两部分:根据规则翻译谱的内容...原创 2019-10-17 16:53:27 · 1540 阅读 · 1 评论 -
浅谈Python设计模式 -- 备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来保存的状态。在备忘录模式中,如果要保存的状态多,可以创造一个备忘录管理者角色来管理备忘录。实例:打过游戏的朋友一定知道,大多数游戏都有保存进度的功能,如果一局游戏下来,忘保存了进度,那么下次只能从上次进度点开始重新打了。一般情况下,保存进度是要存在可持久化存储器...原创 2019-10-17 16:36:34 · 551 阅读 · 0 评论 -
浅谈Python设计模式 -- 迭代器模式
就是利用python中的迭代器。这里不做详细记录。原创 2019-10-17 16:16:45 · 110 阅读 · 0 评论 -
浅谈Python设计模式 -- 模板模式
模板模式:使用抽象操作在基类中定义基本方法,在子类中实现覆盖。模板模式将算法的轮廓保留在单独的方法中。该方法被称为模板方法。和建造者模式非常类似。只是建造者模式多了一个类,指挥类,该类就是模板中基类的固定算法的功能相同,它是一个创建对象的固定算法。模板模式强调创建对象需要经历哪些固定步骤。代码实现:class MakeMeal: def prepare(self):...原创 2019-10-15 17:35:05 · 969 阅读 · 0 评论 -
Python用元类实现单例模式
用元类实现单例的好处是:只需要写一次单例实现的逻辑代码。当需要创建单例时,只需要指定元类即可。尤其是在大型项目中代码多处需要使用单例模式时尤其方便。实现代码请参考https://blog.csdn.net/bocai_xiaodaidai/article/details/102513892...原创 2019-10-12 10:34:48 · 1257 阅读 · 0 评论 -
浅谈Python设计模式 -- 责任链模式
责任链模式:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。用于让多个对象处理一个请求时,或者用于预先不知道由哪个对象来处理某种特定请求时,其原则如下: 1、存在一个对象链(链表、树或者其他便捷的数据结构)。 2、一开始将请求发送给第一个对象,让其处理。 3、对象决定是否处理该请求。 4、对象将请求转发给下一个对象。 5、重复该过程,...原创 2019-10-11 08:44:13 · 210 阅读 · 1 评论 -
浅谈Python设计模式 -- 桥梁模式
桥梁模式:桥接模式通过在类和类实例化中间作用,使其抽象和实现可以独立变化而不互相干扰,这就是桥接模式最大的作用。核心的思想是通过封装,将一个抽象角色类的相关参数和方法分别作为桥接类的属性,这样在实例化桥接类后通过修改桥接类的属性,便可以实现抽象和实现之间的独立变化。实例:中、英文自我介绍。代码实现:class English(object): def ...原创 2019-10-11 08:39:39 · 385 阅读 · 0 评论 -
浅谈Python设计模式 -- 享元模式
享元模式:用共享对象支持大量细粒度对象。大量细粒度的对象的支持共享,可能会涉及这些对象的两类信息:内部状态信息和外部状态信息。享元模式是一种用于解决资源和性能压力时会使用到的设计模式,它的核心思想是通过引入数据共享来提升性能。实例:在开发3D游戏时,例如有成千上万的士兵或者有成千上万棵树,如果一个3D地带的每个对象都单独创建,不使用数据共享,那么性能是无法接受的。既然要创...原创 2019-10-11 08:37:04 · 1038 阅读 · 0 评论 -
浅谈Python设计模式 -- 单例模式
单例模式:就是确保一个类只有一个实例.当你希望整个系统中,某个类只有一个实例时,单例模式就派上了用场。单例模式能够保证调用者读到一致的信息。另外,我将单例模式又分为了两种类型:初始化动作只执行一次:适用于初始化参数固定的场景。如初始化项目配置文件。每次都初始化:适用于初始化参数随调用者的不同而变化的场景,注意每次初始化都会影响所有调用者读取到的信息。实例:某个服务器的配置信...原创 2019-10-10 15:11:54 · 334 阅读 · 0 评论 -
浅谈Python设计模式 -- 工厂模式
工厂模式:工厂模式包涵一个超类。这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建。实例:系统根据prod、uat、dev环境的不同而使用不同的配置。代码实现:class Person: def __init__(self): self.name = None self.gender = N...原创 2019-10-10 15:15:49 · 1093 阅读 · 0 评论 -
浅谈Python设计模式 -- 建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式的作用,就是将“构建”和“表示”分离,以达到解耦的作用。在建造者模式中,还可以加一个Director类,用以安排已有模块的构造步骤。对于在建造者中有比较严格的顺序要求时,该类会有比较大的用处。与门面模式非常类似,门面模式强调将子系统在对外接口中进行组合构建,进而完成某些流程、功能;建造者模...原创 2019-10-10 15:18:06 · 170 阅读 · 0 评论 -
浅谈Python设计模式 -- 原型模式
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式本质就是克隆对象,所以在对象初始化操作比较复杂的情况下,很实用,能大大降低耗时,提高性能,因为“不用重新初始化对象,而是动态地获得对象运行时的状态”。相比工厂模式,原型模式减少了子类的构建。实例:当我们出版了一本书《Python 设计模式 1.0版》,若10 年后我们觉得这本书跟不上时代了,这...原创 2019-10-10 15:19:18 · 1478 阅读 · 0 评论 -
浅谈Python设计模式 -- 装饰器模式
装饰器模式:动态地给一个对象添加一些额外的职责。在增加功能方面,装饰器模式比生成子类更为灵活。实现很简单,这里不介绍。原创 2019-10-10 15:19:53 · 105 阅读 · 0 评论 -
浅谈Python设计模式 -- 门面模式
在面向对象程序设计中,解耦是一种推崇的理念。但事实上由于某些系统中过于复杂,从而增加了客户端与子系统之间的耦合度。例如:在家观看多媒体影院时,更希望按下一个按钮就能实现影碟机,电视,音响的协同工作,而不是说每个机器都要操作一遍。这种情况下可以采用外观模式,即引入一个类对子系统进行包装,让客户端与其进行交互。门面模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一...原创 2019-10-10 15:21:33 · 419 阅读 · 0 评论 -
浅谈Python设计模式 -- 适配器模式
适配器模式:将一个类的接口变换成客户端期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式和装饰模式有一定的相似性,都起包装的作用,但二者本质上又是不同的,装饰模式的结果,是给一个对象增加了一些额外的职责,而适配器模式,则是将另一个对象进行了“伪装”。实例:假设某公司A与某公司B需要合作,公司A需要访问公司B的人员信息,但公司A与公司B协...原创 2019-10-10 15:23:16 · 1015 阅读 · 0 评论 -
浅谈Python设计模式 -- 代理模式
代理模式:为某对象提供一个代理,以控制对其的访问和控制。在使用过程中应尽量对抽象主题类进行代理,不要对加过修饰和方法的子类代理。实例:代理模式是一种使用频率非常高的模式,在多个著名的开源软件和当前多个著名的互联网产品后台程序中都有所应用。下面我们用一个抽象化的简单例子,来说明代理模式。首先,构造一个网络服务器:class Server: content="" ...原创 2019-10-10 15:25:59 · 856 阅读 · 0 评论 -
浅谈Python设计模式 -- 组合模式
组合模式:将对象组合成树形结构以表示“部分”和“整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。实例:公司的层级关系。代码实现:# 抽象一个组织类class Component(object): def __init__(self, name): self.name = name def add(self,comp...原创 2019-10-10 15:27:48 · 591 阅读 · 0 评论 -
Python设计模式分类
python设计模式可分为22种:创建类设计模式 单例模式、工厂模式、建造者模式、原型模式 结构类设计模式 装饰器模式、适配器模式、门面模式、代理模式、组合模式、享元模式、桥梁模式 行为类模式 策略模式、责任链模式、命令模式、中介者模式、模板模式、迭代器模式、访问者模式、观察者模式、解释器模式、备忘录模式、状态模式 ...原创 2019-10-10 14:32:34 · 434 阅读 · 0 评论