
C++设计模式
文章平均质量分 73
包含一些和C++设计模式相关的笔记
旺代
当有机会做出选择时,不要让自己后悔。
展开
-
C++设计模式(职责链、命令、访问者)
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。原创 2024-12-07 23:15:05 · 473 阅读 · 0 评论 -
C++设计模式(建造者、中介者、备忘录)
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将对象恢复到原先保存的状态。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。原创 2024-12-07 23:14:59 · 480 阅读 · 0 评论 -
C++设计模式(桥接、享元、外观、状态)
将抽象部分与它的实现部分分离,使它们可以独立地变化。桥接模式通过使用组合关系而不是继承关系来实现解耦,从而提高系统的灵活性和可扩展性。运用共享技术有效地支持大量细粒度的对象。享元模式能够共享已存在的对象实例,而不是在需要时每次都创建新的对象实例,从而避免大量重复对象的开销。为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式将多个子系统的功能封装起来,对外提供一个统一的接口。原创 2024-12-05 16:13:02 · 497 阅读 · 0 评论 -
C++设计模式(原型、代理、适配器、组合)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式允许通过复制现有的对象来创建新对象,而不是通过实例化类来创建。这种方式可以避免创建重复的对象,从而提高性能和降低内存消耗。为其它对象提供一种代理以控制对这个对象的访问。代理模式通过引入一个新的代理对象来间接访问原始对象,从而实现对原始对象的控制和管理,可以用于实现远程代理、虚拟代理、保护代理和智能指引等。将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。原创 2024-12-05 16:12:43 · 616 阅读 · 0 评论 -
C++设计模式(观察者模式)
在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”,即一个对象的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系,从而实现软件体系结构的松耦合。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。——GOF。原创 2024-11-29 18:20:49 · 738 阅读 · 0 评论 -
C++设计模式(策略模式)
在软件构建过程中,某些对象使用的算法可能多种多样、经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法,将算法与对象本身解耦,从而避免上述问题?定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户程序而变化。——GOFStrategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时根据需要在各个算法之间进行切换。原创 2024-11-29 18:20:41 · 635 阅读 · 0 评论 -
C++设计模式(模板模式)
在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?定义一个操作中的算法的骨架(稳定),而将一些步骤(变化)延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。——GOF。原创 2024-11-29 11:17:22 · 654 阅读 · 0 评论 -
C++设计模式(装饰模式)
在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合) 会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题,从而使得任何“功能扩展变化”所导致的影响将为最低?动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承) 更为灵活(消除重复代码并减少子类个数)。原创 2024-11-29 11:16:58 · 744 阅读 · 0 评论 -
C++设计模式(工厂模式)
在软件系统中,经常面临着创建对象的工作,这些对象有可能是一系列相互依赖的对象;由于需求的变化,需要创建的对象的具体类型经常变化,同时也可能会有更多系列的对象需要被创建。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。——GOF。原创 2024-11-26 20:12:16 · 1886 阅读 · 0 评论 -
C++设计模式(单例模式)
在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应该是类设计者的责任,而不是使用者的责任。保证一个类仅有一个实例,并提供一个该实例的全局访问点。——GOFSingleton模式中的实例构造器可以设置为protected以允许子类派生。Singleton模式一般不支持拷贝构造函数和Clone接口,因为这有可能导致多个对象实例,与Singleton模式的初衷违背。原创 2024-11-26 20:12:08 · 1397 阅读 · 0 评论 -
C++设计模式介绍
没有一步到位的设计模式。2.第二段代码在添加新形状时只需创建新的类并重写Shape基类中的Draw方法,然后在创建新形状对象时将其添加到vector中,具有更好的可扩展性。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。面向对象设计模式是“好的面向对象设计”,所谓“好的面象对象设计”指的是那些可以满足“应对变化,提高复用”的设计。1.第一段代码在添加新形状时需要修改MainForm类,添加新的vector和处理逻辑,这降低了代码的可扩展性。原创 2024-11-19 10:48:18 · 1111 阅读 · 0 评论