
设计模式
文章平均质量分 93
设计模式的学习记录
郑同学zxc
这个作者很懒,什么都没留下…
展开
-
设计模式27-设计模式的总结
任何模式的的优点就在于它解决的变化点,它的缺点就是它要求的稳定点。如果一个模式的稳定点出现变化那这个模式不适合解决当前事务需要其他设计模式来解决。觉大多数模式都是基于第三种,通过类型指针动态的指向某个具体类型的对象,来应对变化点。手中无剑,心中无剑:看见这个设计模式,但是不理解这个设计模式。手中有剑,心中无剑:可以识别模式。手中有剑,心中有剑:作为框架开发人员为应用设计某些模式。手中无剑,心中有剑:忘掉设计模式,只遵守涉及原则。分解事务,归类事务,那些是变化的那些是不变的。编译时依赖=》运行时依赖。原创 2024-09-02 23:19:26 · 633 阅读 · 0 评论 -
设计模式26-解析器模式
解析器模式是一种行为设计模式,它定义了一个语言的语法表示,并实现一个解释器来处理该语言的句子。解析器模式将表达式解析为抽象语法树(AST),然后通过遍历语法树来执行或评估表达式。解析器模式的应用场合是解析器模式应用中的难点。只有满足业务规则频繁变化,且类似结构会不断重复出现。并且容易抽象为语法规则的问题,才适合使用解析器模式。使用解气模式来表示文法规则,从而可以使用。面向对象的技巧来方便的扩展文法。解析器模式比较适合简单的文法表示,对于复杂的文法表示解析模式会产生比较大的类层次结构。原创 2024-08-27 23:04:16 · 1142 阅读 · 0 评论 -
设计模式25-访问器模式
访问者模式(Visitor Pattern)是一种行为设计模式,它将对数据结构中的元素进行操作的功能封装到访问者对象中,使得在不改变数据结构的前提下增加新的操作变得容易。访问者模式是一种将算法与对象结构分离的设计模式,它定义了一组操作,可以在不修改对象结构的前提下为对象结构中每个元素添加新的操作。这种模式通常用于对象结构中的元素需要被不同方式处理的情况。这张图展示了访问者模式的主要组成部分:抽象访问者、具体访问者、抽象元素和具体元素。原创 2024-08-26 23:17:41 · 1146 阅读 · 0 评论 -
设计模式24-命令模式
在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。行为变化模式,将组件的行为和组件本身进行解构。从而支持组建行为的变化。实现两者之间的松耦合。行为变化模式通常指的是一类设计模式,它们允许对象在运行时根据状态或环境的变化动态地改变行为。这类模式通过将算法、职责或行为的变化封装起来,使得系统更具灵活性和可扩展性。行为变化模式通过封装行为、状态或算法的变化,使得系统更加灵活和可扩展。这类模式在解决动态变化需求、减少代码复杂性、提高系统的可维护性等方面具有重要作用。原创 2024-08-21 23:51:19 · 1108 阅读 · 0 评论 -
设计模式23-职责链
职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止。责任链模式对应用场合在于一个请求可能有多个接受者。但是最后真正的接受者只有一个,这时候请求发送者与接受者的耦合有可能出现变化脆弱的症状。这次练的目的就是将二者进行解耦。从而更好地应对变化。原创 2024-08-19 23:32:42 · 1030 阅读 · 0 评论 -
设计模式22-迭代器模式
迭代器模式提供一种方法,顺序访问一个聚合对象中的各个元素,而不暴露该对象的内部表示。在 C++ 中,模板实现迭代器的方式由于性能、类型安全性、灵活性、和代码复用性等方面的优势,通常是优于使用多态性的。模板通过在编译时确定类型和生成代码,避免了运行时开销,使得迭代器更高效且灵活。但在处理需要运行时多态性或异构集合的情况下,多态性仍然是不可替代的。有些模式运用的技术机制可能会过时但是它的思想不会过时迭代抽象:访问一个聚合对象的内容,而无需暴露它的内部表示。原创 2024-08-15 23:03:23 · 833 阅读 · 0 评论 -
设计模式21-组合模式
数据结构模式常常有一些组件在内部具有特定的数据结构。如何让客户程序依赖这些特定的数据结构,将极大的破坏组件的复用。那么这个时候将这些特定数据结构封装在内部。在外部提供统一的接口来实现与特定数据结构无关的访问。是一种行之有效的解决方案。典型模式组合模式迭代器模式组合模式允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。组合模式通过将对象组合成树形结构来表示“部分-整体”的层次结构,使得客户端可以一致地处理单个对象和组合对象。原创 2024-08-14 00:16:15 · 1205 阅读 · 0 评论 -
设计模式20-备忘录模式
备忘录模式在不破坏封装性的前提下,捕获对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。备忘录模式是一种强大的设计模式,通过封装对象的内部状态,实现了状态的保存和恢复功能。虽然它能够有效地支持撤销和恢复操作,但在实际应用中需要注意内存消耗和管理复杂性,特别是在对象状态复杂且变化频繁的场景下。备忘录模式存储原发器对象的内部状态。在需要时恢复原发器状态。备忘录模式的核心是信息隐藏,即原发器需要向外界隐藏信息保持其封装性,但同时又需要将再保存到外界。原创 2024-08-08 23:56:38 · 815 阅读 · 0 评论 -
设计模式19-状态模式
在组建构建过程中,某些对象的状态经常面临着变化。如何对这些变化进行有效的管理呢?同时又wage高层模块的稳定。状态变化模式为这一问题提供了一种解决方案。典型模式StateMemento状态模式允许对象在内部状态改变时改变其行为,对象看起来好像修改了它的类。状态模式通过将状态相关的行为封装在独立的状态类中,使得对象在不同状态下具有不同的行为,简化了状态转换的逻辑,并提高了系统的可维护性和可扩展性。在适当的场景下使用状态模式,可以显著改善代码的可读性和灵活性。原创 2024-08-06 23:57:20 · 979 阅读 · 0 评论 -
设计模式18-中介者模式
用一个中介对象来封装(封装变化)一系列的对象交互。终结者使各对象不需要显示的相互引用(编译时依赖变成运行时依赖),从而使其耦合松散也可以独立的改变他们之间的交互。–《设计模式》GOF中介者模式定义了一个中介对象,该对象封装了对象之间的交互方式,使得对象之间不再需要显式地相互引用,从而使其耦合松散,且可以独立地改变它们之间的交互。中介者模式通过引入中介者对象,将对象之间的交互逻辑集中管理,从而降低对象之间的耦合度。原创 2024-08-06 00:19:42 · 859 阅读 · 0 评论 -
设计模式17-适配模式
定义适配器模式将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。目标(Target)接口:定义客户所需的接口。适配者(Adaptee)类:定义一个已经存在的接口,这个接口需要适配。适配器(Adapter)类:将适配者接口转换成目标接口,使得客户端可以通过目标接口与适配者进行通信。类适配器(Class Adapter):使用多重继承实现适配。对象适配器(Object Adapter):使用组合实现适配。原创 2024-07-31 23:50:40 · 1031 阅读 · 0 评论 -
设计模式16-代理模式
为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。代理模式提供了一种通过代理对象控制对原始对象访问的机制,使得我们可以在不改变客户端代码的情况下,对对象的访问进行控制和增强。尽管引入代理会增加一定的性能开销和系统复杂性,但在适当的场景下使用代理模式,可以显著提高系统的灵活性和可维护性。增加一层间接层。是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中直接使用某些对象会带来很多问题作为间接层的代理对象必须解决这一问题的常见手段。原创 2024-07-30 23:31:45 · 966 阅读 · 0 评论 -
设计模式15-门面模式
接口隔离原则强调将大接口拆分成更小的、更加具体的接口,以便客户端只依赖于它们实际需要的接口。上述设计模式在一定程度上体现了这一原则,通过这些模式的合理运用,可以设计出更加灵活和可维护的系统。为此系统中的一组接口提供了一个一致稳定的界面。门面模式是定义了一个高层接口,这个接口使得这一子系统更容易的使用和复用。从客户程序的角度来看,门面模式简化了一个组件系统的接口。组建内部与外部客户程序来说,达到了一种解耦的效果。内部子系统的任何变化都不会影响到门面模式接口的变化。原创 2024-07-30 00:57:23 · 1157 阅读 · 0 评论 -
设计模式14-享元模式
运用共享技术有效地支持大量细粒度的对象。–《设计模式》GoF定义了对象的接口,可以接受外部状态。实现Flyweight接口,并为内部状态(不变部分)进行存储。并不是所有的Flyweight子类都需要被共享,非共享Flyweight类可以实现Flyweight接口,但它们不是共享的。创建并管理Flyweight对象,确保合理地共享Flyweight。面对对象很好的解决了抽象性的问题,但是作为一个运行在机器中的程序实体我们需要考虑对象的代价问题。原创 2024-07-25 23:21:36 · 1168 阅读 · 0 评论 -
设计模式13-单件模式
面向对象很好的解决了抽象的问题,但是必不可免的要付出一定的代价(类空间的重复分配等)。对于通常情况来讲,面向对象的成本大多都可以忽略不计。但某些情况面向对象所在的成本必须谨慎处理。设计模式中的对象性能模式是指那些专注于提高系统性能、优化资源使用和管理的设计模式。这些模式通过有效的对象创建、共享、复用和管理策略,减少内存占用、提高运行效率,从而提升整体系统性能。保证一个类仅有一个实力,并提供一个该实例的全局访问点。线程不安全版本:简单但在多线程环境下不安全。线程安全版本(锁代价高)原创 2024-07-24 00:07:36 · 1091 阅读 · 0 评论 -
设计模式12-构建器
构建器模式是一种强大的设计模式,通过将对象的构建过程分离出来,使得复杂对象的创建变得更加灵活和可维护。在C++中,构建器模式可以通过定义一个产品类、一个抽象构建器类、一个具体构建器类以及一个指挥者类来实现。这种模式广泛应用于需要创建复杂对象的场景中,例如GUI库中的窗口构建、报表生成、游戏中的复杂角色创建等。原创 2024-07-23 00:33:29 · 1182 阅读 · 0 评论 -
设计模式11-原型模式
通过对象创建模式绕开动态内存分配来避免创建过程中所导致的耦合过紧的问题。从而支持对象创建的稳定,它是接口抽象之后的第一步工作。原型模式同样用于隔离类对象的使用者和具体类型之间的耦合关系,同样要求这些异变类拥有稳定的接口。原型模式对于如何创建异变类的实体对象,采用原型克隆的方法来做。它使得我们可以非常灵活的动态创建。拥有某些稳定接口的新对象。所需工作仅仅是注册一个新类的对象即原型,然后在任何需要的地方克隆。原型模式中的克隆方法可以利用某些框架中的序列化,来实现深拷贝。原创 2024-07-19 00:20:04 · 1442 阅读 · 0 评论 -
设计模式10-抽象工厂
抽象工厂(Abstract Factory)设计模式是一种创建型模式,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定具体类。这个模式的核心思想是将对象的创建和使用分离开来,以便在不修改客户端代码的情况下,能够方便地扩展系统的对象创建。原创 2024-07-16 20:29:03 · 1007 阅读 · 0 评论 -
设计模式9-工厂模式(Factory Method)
通过对象超级模式绕开。动态内存分配(new),来避免对象创建过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定,它是结构抽象之后的第一步工作。工厂方法(Factory Method Pattern)抽象工厂(Abstract Factory Pattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体的类。原型模式(Prototype Pattern)将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。原创 2024-07-16 00:18:48 · 1191 阅读 · 0 评论 -
设计模式8-桥模式
将抽象部分也就是业务功能,与实现部分分离,使他们都可以独立的变化。public:Messager是一个抽象基类,定义了登录、发送消息、发送图片以及平台相关的功能(播放声音、绘制图形、写文本、连接)。这段代码通过将不同平台的实现和业务逻辑分开,展示了如何使用继承和多态来实现跨平台的消息传递系统。它遵循了开闭原则(对扩展开放,对修改关闭),使得添加新的平台或功能变得更容易。具体地,Messager定义了接口,和实现了平台相关的功能,而和实现了具体的业务逻辑。原创 2024-07-10 00:29:09 · 1179 阅读 · 0 评论 -
设计模式7-装饰模式
在软件组件的设计中,如果责任划分的不清晰,使用记者得到的结果往往是跟随需求的变化,以及子类的增加而急剧膨胀。同时充值的重复代码。这个时候就应该责任划分清楚。使每个类负责自己的责任模块。这才是单一职责模式的关键。典型模式:装饰模式(decorator model),桥模式(Bridge model)动态组合的给一个对象增加一些额外的职责,就增加工人而言,装饰模式比生成子类更加灵活。也就是消除重复代码以及减少子类个数。职责分离:每个装饰器类(如和)只负责增加一个特定的功能,使得代码更符合单一职责原则。原创 2024-07-09 01:09:34 · 971 阅读 · 0 评论 -
设计模式6-观察者模式(Observer)
使用面向对象的抽象观察者模式使得我们可以独立的改变目标与观察者,从而使二者之间的依赖关系达到松耦合。目标发送通知时无需指定观察者。通知可以携带通知信息作为参数会自动传播。观察着自己决定是否需要订阅通知目标对象对此一无所知。观察者模式是基于事件的UI框架中非常常用的设计模式。也是MVC模式的一个重要组成部分。原创 2024-06-25 23:37:10 · 702 阅读 · 0 评论 -
设计模式5-策略模式(Strategy)
策略模式也是属于组件协作模式一种。现代软件专业分工之后的第一个结果是框架语音应用程序的划分。组建协作模式,通过晚期绑定来实现框架与应用程序之间的松耦合。组件协作是二者之间协作时常用的模式。程序中定义一系列算法。把他们一个个封装起来。并且使他们可互相替换变化该模式使得算法可独立于使用它的客户程序而变化扩展或者进行子类化。原创 2024-06-24 23:39:56 · 1242 阅读 · 0 评论 -
设计模式4-模版方法
定义一个操作中的算法框架(稳定),而将一些步骤延迟(变化)到子类中template Method 使得子类可以不改变。一个算法的结构即可重新定义就是重写该算法的某些特定步骤。模板方法模式是一种非常基础性的设计模式。在面向对象系统中有着大量的应用。他用最简洁的机制也就是虚函数的多态性。为很多应用程序架构提供了灵活的扩展点。是代码复用方面的基本实现结构除了可以灵活应对自步骤的变化以外,不要调用我,让我来调用你。反向控制结构是模板方法的典型应用。原创 2024-06-22 00:11:37 · 795 阅读 · 0 评论 -
设计模式3-分类
设计模式(Design Patterns)是一种解决特定问题的通用解决方案,通常分为以下三类:创建型模式(Creational Patterns):结构型模式(Structural Patterns):行为型模式(Behavioral Patterns):工厂方法模式(Factory Method):抽象工厂模式(Abstract Factory):单例模式(Singleton):生成器模式(Builder):原型模式(Prototype):结构型模式(Structural P原创 2024-06-21 23:31:07 · 1039 阅读 · 0 评论 -
设计模式2-面向对象设计原则
变化是复用的天地。面向对象设计最大的优势在于抵御变化。重新认识面向对象。从宏观层面来看,面向对象的构建方式更能适应软件的变化。将变化所带来的影响减为最小。从微观层面来看面,面向对象的方式更强调这个类的责任。由于需求变化导致的增类型不应该影响原来类型的实现设计原则大于设计模式。可以通过设计原则发明设计模式.原创 2024-06-19 01:54:11 · 1072 阅读 · 0 评论 -
设计模式1-简介
每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案。的核心,这样你就能一次又一次的使用该方案,而不必重复的劳动。通俗来说:设计模式是我们在软件开发时针对常见问题的通用的,这个方案也是前辈们不断摸索总结出的好的辩证方法,可以理解成为打游戏的攻略。遇到同一类boss时怎么走位作用减少烂代码,让项目更好维护。开拓思维,也是软件开发岗位的面试重点。原创 2024-06-18 00:47:06 · 668 阅读 · 0 评论 -
设计模式-观察者模式
设计模式-观察者模式概念实现代码概念当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。介绍意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。原创 2022-03-03 23:20:42 · 168 阅读 · 0 评论