![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 77
Htojk
这个作者很懒,什么都没留下…
展开
-
【python设计模式】23、访问者模式
访问者模式是一种将算法与对象结构分离的设计模式。它的核心思想是将访问者对象封装算法,然后将它们作用于各个元素对象。访问者模式中的元素对象包括一个元素接口和多个元素类,每个元素类都实现了元素接口,且包含一个accept()方法,用于接受访问者对象。访问者对象包括一个访问者接口和多个访问者类,每个访问者类都实现了访问者接口,且包含多个visit()方法,用于访问不同的元素类。当需要为元素对象增加新的操作时,只需要定义一个新的访问者类并实现相应的visit()方法即可,而不需要改变元素对象或现有的访问者类。原创 2023-04-10 10:51:05 · 443 阅读 · 0 评论 -
【python设计模式】22、责任链模式
在责任链模式中,每个处理器(Handler)都可以处理一个请求,如果它不能处理这个请求,就把请求传递给下一个处理器,直到有一个处理器能够处理为止。每个对象都有处理请求的机会,如果它不能处理请求,就会将请求传递给下一个对象。因此,当一个请求到达 ConcreteHandler1 时,它会首先尝试由 ConcreteHandler1 来处理,如果不能处理,则会传递给 ConcreteHandler2,然后是 ConcreteHandler3,最后是 DefaultHandler。处理器链继续处理请求。原创 2023-04-10 10:22:24 · 639 阅读 · 0 评论 -
【python设计模式】21、状态模式
状态模式是一种行为型设计模式,它将一个对象的行为和状态进行分离,从而实现了对象在不同状态下具有不同的行为表现。这种模式的核心思想是将状态抽象成一个独立的类,并将状态的转换和判断逻辑封装在状态类中,从而使得状态的变化不会对对象的行为造成影响。在上面的代码中,State是一个状态类,OffState和OnState是具体的状态类,它们实现了State中定义的抽象方法。这种模式将对象的状态和行为分离,使得同一种行为在不同的状态下可以有不同的表现,从而达到更加灵活的设计和实现。原创 2023-04-10 09:40:12 · 204 阅读 · 0 评论 -
【python设计模式】19、备忘录模式
例如,在一个游戏中,我们可以使用备忘录模式来保存玩家的状态,以便在需要时恢复它们,或者在玩家离线时自动保存状态。备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏对象封装性的前提下,捕获对象的内部状态并在对象之外保存该状态,以便在需要时恢复对象的状态。总之,备忘录模式的哲学思想是,保存和恢复对象状态的能力对于软件设计来说非常重要,它可以帮助我们更好地管理对象的状态,并提高软件的可维护性和可靠性。订单状态的保存和恢复:在电商网站中,订单状态的保存和恢复可以使用备忘录模式来实现。原创 2023-04-06 14:37:36 · 832 阅读 · 0 评论 -
【python设计模式】18、仲裁者模式
这样做的好处是,如果需要增加更多的对象,只需要将它们的实例传递给中央仲裁者对象即可,而不需要修改对象之间的交互逻辑。在仲裁者模式中,一组对象将自己的引用传递给仲裁者对象,仲裁者对象负责处理这些对象之间的通信。交通信号灯系统:在城市中的交通信号灯系统中,交通信号灯扮演了一个中介者的角色,它协调了车辆和行人之间的交互,通过控制信号灯的颜色和时间来控制交通流量。可扩展性问题:如果系统中的对象之间的关系比较复杂,可能需要大量的仲裁者对象来协调它们之间的交互,这可能会导致系统的可扩展性问题。原创 2023-04-06 14:04:26 · 559 阅读 · 0 评论 -
【python设计模式】17、观察者模式
另外,观察者模式还可以被解读为一种“相互作用”的方式。使用观察者模式,可以将股票价格作为被观察者,将分析系统作为观察者,当股票价格发生变化时,被观察者会自动通知观察者,观察者可以根据价格变化做出相应的决策。使用观察者模式,可以将事件作为被观察者,将游戏对象作为观察者,当事件发生时,被观察者会自动通知观察者,观察者可以根据事件做出相应的反应。观察者模式是一种常见的设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生改变时,所有的观察者都会收到通知并进行相应的处理。原创 2023-04-06 10:29:12 · 978 阅读 · 0 评论 -
【python设计模式】16、迭代器模式
简化了集合对象的接口:迭代器模式将集合对象的遍历算法封装在迭代器对象中,使得集合对象可以专注于自己的数据结构和操作,无需暴露遍历算法,从而简化了集合对象的接口。接口隔离原则:迭代器模式通过定义一个迭代器接口,将集合对象和迭代器对象分离开来,从而避免了集合对象对迭代器对象的依赖关系过强,提高了代码的灵活性和可维护性。集合对象的修改可能会导致迭代器失效:如果在迭代器遍历集合对象的过程中,集合对象发生了修改,可能会导致迭代器失效,需要重新获取迭代器对象才能继续遍历。原创 2023-04-06 08:46:37 · 637 阅读 · 0 评论 -
【python设计模式】15、命令模式
当需要执行一个命令时,调用者类会将命令类设置为当前的命令,然后调用命令的execute方法,实现命令的执行。接收者负责实际执行命令的操作。总之,命令模式的哲学思想是将请求封装成对象,从而增加系统的灵活性和可扩展性,实现请求的发起者和执行者之间的松耦合。命令模式是一种行为型设计模式,它的目的是将请求封装成对象,从而使请求的发起者和接收者之间解耦,使得不同的请求可以被存储、传递、调用、撤销、重做等。在命令模式中,每个命令都对应着一个命令对象,该对象封装了命令的具体实现逻辑,并且实现了执行、撤销等操作。原创 2023-04-04 17:31:10 · 258 阅读 · 0 评论 -
【python设计模式】14、模板模式
模板模式的核心思想是,将算法中不变的部分放到父类中实现,而将可变的部分留给子类去实现,从而使得不同的子类可以根据自己的需求来实现算法中的可变部分。此外,模板模式还能够降低算法的复杂度,提高代码的可维护性。需要一种通用的算法骨架,让不同的子类来实现具体的细节,例如在开发一个游戏时,游戏中的某些场景、角色等都具有相同的行为模式,但是具体实现可能会因为场景、角色的不同而变化。可能会限制子类的灵活性:由于模板模式的算法骨架已经在父类中实现,因此子类只能在父类定义的方法中进行具体的实现,这可能会限制子类的灵活性。原创 2023-04-04 17:20:27 · 593 阅读 · 1 评论 -
【python设计模式】12、享元模式
在软件设计中,这种思想可以转化为从具体的对象中提取共同的特征,并将这些特征作为共享的属性,以避免重复创建相似的对象。可共享的部分可以被多个对象共享,而不可共享的部分则需要每个对象都有自己的实例。可能会影响程序的可读性:由于享元模式需要将对象分为可共享和不可共享两部分,可能会影响程序的可读性。可能会影响程序的安全性:如果共享对象的状态可以被修改,可能会影响程序的安全性。需要注意的是,使用享元模式时要确保可共享部分是不可变的,否则会导致共享对象的状态被修改,从而破坏程序的正确性。原创 2023-04-04 14:39:12 · 519 阅读 · 0 评论 -
【python设计模式】8、桥接模式
通过将抽象部分和实现部分分离开来,桥接模式可以实现抽象部分和实现部分之间的松耦合,从而提高系统的灵活性和可扩展性。具体来说,桥接模式通过将一个类的抽象和它的实现分离,使它们可以独立地变化,从而降低它们之间的耦合性。可维护性:由于桥接模式将抽象部分和实现部分分离开来,因此对于每个部分的修改都不会对另一个部分产生影响,从而降低了代码的复杂性,提高了代码的可维护性。桥接模式:Shape 类充当抽象部分,DrawAPI 类充当实现部分,这两个类通过 Shape 的构造函数进行组合,以实现抽象和实现的分离。原创 2023-04-04 11:37:52 · 838 阅读 · 0 评论 -
【python设计模式】7、代理模式
代理主题在真实主题前面充当了一道屏障,代理主题可以控制访问真实主题的方式,并在访问前后进行一些额外的处理,如添加日志、缓存等。代理对象充当另一个对象的接口,客户端使用代理对象来访问原始对象,同时代理对象对访问进行了控制,可以限制对原始对象的访问、延迟访问原始对象、缓存访问结果等。智能代理可以提高系统的性能和用户体验。保护目标对象:代理模式能够通过代理对象来控制对被代理对象的访问,从而保护被代理对象不受非法访问和恶意修改。扩展性好:代理模式能够通过代理对象来扩展被代理对象的功能,而无需对被代理对象进行修改。原创 2023-04-04 10:49:10 · 739 阅读 · 0 评论 -
【python设计模式】10、组合模式
在这些领域中,整体和部分之间的关系也是递归的,每个部分都可以是整体,由更小的部分组成。增强代码可扩展性和可维护性:当需要添加新的节点类型时,只需要创建新的类实现相同的接口即可,而不需要修改现有的代码。可以透明地处理组合对象和单个对象:客户端代码可以像处理单个对象一样处理组合对象和单个对象,无需关心对象的具体类型,从而实现了透明性。需要注意的是,这只是一个简单的示例,实际应用中可能会有更多的对象和方法。可以提高代码的灵活性:由于组合模式中的对象都实现相同的接口,因此可以灵活地组合不同的对象实现不同的功能。原创 2023-04-04 13:54:50 · 1289 阅读 · 0 评论 -
【python设计模式】9、适配器模式
适配器模式的哲学思想是“尽可能地利用现有的资源”,即将现有的接口或类与其他不兼容的接口或类连接起来,使它们能够协同工作,以实现所需的功能。适配器模式的哲学思想与UNIX哲学中的“小即是美”原则有着相似之处,即在现有的系统或工具基础上,通过简单的组合或改进来解决问题,而不是重新发明轮子。在现实生活中,适配器也是一种常见的工具,例如插头适配器、翻译适配器等等,都是为了解决不兼容的问题而设计的。通过适配器模式,可以将现有的代码与新的组件或接口集成,而不必重写现有代码或更改现有的接口。原创 2023-04-04 12:38:57 · 750 阅读 · 0 评论 -
【python设计模式】5、原型模式
原型模式的使用场景通常是当对象的创建过程较为复杂或者需要复用现有对象的状态时,可以考虑使用原型模式来创建新的对象。这个已经存在的对象被称为原型对象,新的对象通过复制原型对象的属性和状态来创建。原型对象的创建过程可能比较复杂:由于原型对象需要包含所有要复制的属性和状态,因此原型对象的创建过程可能比较复杂,尤其是当属性和状态是深层嵌套的时候。减少对象的创建时间和消耗的资源:原型模式通过复制已有对象来创建新对象,避免了重复创建对象的过程,因此可以大幅度减少对象的创建时间和消耗的资源。在测试代码中,创建了一个。原创 2023-04-03 17:38:09 · 606 阅读 · 0 评论 -
【python设计模式】11、外观模式
降低了耦合度:外观模式将客户端与子系统之间的耦合度降低了,因为客户端只需要与外观对象交互,而不需要直接与子系统交互,从而减少了对象之间的依赖关系,提高了代码的灵活性和可扩展性。增加系统复杂性:引入外观对象会增加系统的复杂性,因为外观对象需要了解子系统的实现细节,才能提供相应的简化接口,如果系统本身已经足够简单,引入外观模式反而会增加代码的复杂性。简化接口:外观模式隐藏了子系统的复杂性,提供了一个简单的接口,使得客户端不需要了解子系统的具体实现细节,从而降低了客户端的使用难度。原创 2023-04-04 14:12:59 · 153 阅读 · 0 评论 -
【python设计模式】6、装饰器模式
装饰器模式的实现通常涉及创建一个抽象的装饰器类和一个具体的装饰器类,这个具体的装饰器类可以添加额外的行为或修改对象的行为。装饰器模式的基本思想是:将一个对象“包装”在另一个对象中,从而实现增强原有对象的功能,而不改变原有对象的结构。装饰器模式常常应用于需要动态添加功能或修改对象行为的场景,例如在不改变现有代码的情况下为一个类添加新的功能,或在运行时添加日志、缓存等功能。日志记录:通过装饰器模式,可以在不改变原有代码的情况下,给函数或方法添加日志记录的功能,方便调试和排查问题。原创 2023-04-04 10:18:58 · 1190 阅读 · 0 评论 -
【python设计模式】4、建造者模式
建造者模式的哲学思想是将复杂对象的创建过程分解成多个简单的步骤,并将这些步骤分别封装在一个独立的建造者类中。由于建造者模式将对象构造过程分解为多个步骤,所以如果要创建简单的对象,建造者模式会增加代码的复杂度,使得代码变得更加冗长和难以理解。总之,建造者模式的哲学思想是将复杂对象的创建过程分解成多个简单的步骤,并将其组合方式变得更加灵活,同时将对象的构建与其表示分离开来,以提高代码的可维护性和可扩展性。建造者模式的核心思想是将一个复杂对象的构造过程和它的表示分离开来,使得同样的构造过程可以创建不同的表示。原创 2023-04-03 17:13:57 · 1160 阅读 · 0 评论 -
python设计模式汇总
详情直接参考:设计模式23模式介绍原创 2023-04-03 14:17:36 · 81 阅读 · 0 评论 -
【python设计模式】2、工厂模式
对象的创建需要根据不同的条件来选择不同的实现:如果需要根据不同的条件来选择不同的实现,可以使用工厂模式来封装对象的创建过程,从而使得客户端代码不需要关心对象的创建细节,只需要调用工厂类的方法即可。多个地方需要创建相同类型的对象:如果需要在多个地方创建相同类型的对象,可以使用工厂模式来封装对象的创建过程,从而避免代码的重复性,提高代码的可维护性和可扩展性。将对象的创建和使用分离:工厂模式可以将对象的创建和使用分离开来,客户端只需要知道需要什么对象,而不需要关心对象的创建过程,这样可以降低客户端代码的复杂度。原创 2023-04-03 16:03:38 · 1014 阅读 · 0 评论 -
【python设计模式】3、抽象工厂模式
例如,在创建一个复杂的产品时,需要保证其各个部分之间的兼容性,我们可以使用抽象工厂模式来创建这些部分,以确保它们之间的一致性。抽象工厂模式是工厂模式的扩展,它提供了一种创建一组相关或相互依赖对象的接口,而不需要指定它们具体的类。在抽象工厂模式中,抽象工厂类定义了一组用于创建一系列产品的抽象方法,具体工厂类实现了这些抽象方法,从而创建出具体的产品对象。抽象工厂模式的扩展性比较差,如果需要增加新的产品,需要修改抽象工厂类的接口,这会导致所有的具体工厂类都需要进行修改,从而影响系统的稳定性。原创 2023-04-03 16:51:50 · 1096 阅读 · 0 评论 -
【python设计模式】1、单例模式
单例模式的测试比较困难:由于单例模式只能创建一个实例,因此在测试的时候可能会比较困难,需要特别注意测试环境和测试用例的设计。单例模式不适用于动态扩展:由于单例模式只能创建一个实例,因此在需要动态扩展实例的情况下,会比较麻烦,可能需要修改代码。单例模式可能导致代码紧耦合:由于单例模式提供了全局访问点,可能导致代码之间的耦合度增加,降低了代码的灵活性和可扩展性。简化操作:单例模式可以提供一个全局的访问点,方便其他代码调用实例的方法和属性,避免了频繁传递对象实例的操作。网站计数器、生成全局唯一序列号等。原创 2023-04-03 15:00:30 · 1079 阅读 · 2 评论