
设计模式
文章平均质量分 85
设计模式C++
~风起~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式之访问者
(Visitor) 是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。适用场景代码如下:问题:做一款生成冰激凌和雪糕的程序,要求可以扩展新的口味,并且可以扩展新的包装方式。解决方案:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。原创 2024-10-02 15:29:20 · 1323 阅读 · 0 评论 -
设计模式之模板方法
(Template Method) 是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。模板方法模式是所有模式中最为常见的几个模式之一,是的的基本技术。,没有关联关系。因此,在模板方法模式的类结构图中,。模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做;而将这些基本方法汇总起来的方法叫做,这个设计模式的名字就是从此而来。原创 2024-10-02 15:24:49 · 1012 阅读 · 0 评论 -
设计模式之策略设计模式
(Strategy) 是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。适用场景代码如下:问题:做一款打斗游戏,玩家使用的英雄使用不同的武器将会产生不同的损伤效果。解决方案:定义一些列的算法,把他们一个个封装起来,并且使它们可以相互替换。本模式使得算法可以独立于使用它的客户而变化。原创 2024-09-28 18:51:06 · 1312 阅读 · 0 评论 -
设计模式之状态设计模式
(State) 是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。适用场景代码如下:问题:开发一个糖果贩卖机,当投入硬币按下按钮,糖果机会掉落一颗糖果,当没有硬币投入时,直接按下按钮,将会获得请投币的提示解决方案:允许一个对象在其内部状态改变时改变它的行为,对象看起来适合改变了它的类。原创 2024-09-28 18:48:54 · 1052 阅读 · 0 评论 -
设计模式之观察者
(Observer)是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。适用场景update代码如下:问题:开发一个购物平台,当商品缺货时如何处理?如果客户经常主动查看,无疑会浪费客户的时间,如果平台主动通知客户,那么对于不需要的客户来说并不友好,缺货商品一多消息也容易泛滥。解决方案:定义对象间的一种一对多关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。转载 2024-09-26 08:00:00 · 867 阅读 · 0 评论 -
设计模式之备忘录
(Memento) 是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。适用场景(Originator) 类可以生成自身状态的快照, 也可以在需要时通过快照恢复自身状态。(Memento) 是原发器状态快照的值对象 (value object)。通常做法是将备忘录设为不可变的, 并通过构造函数一次性传递数据。(Caretaker) 仅知道 “何时” 和 “为何” 捕捉原发器的状态, 以及何时恢复状态。负责人通过保存备忘录栈来记录原发器的历史状态。原创 2024-09-24 18:00:00 · 951 阅读 · 0 评论 -
设计模式之中介者
(Mediator) 是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。适用场景代码如下:问题:实现一个机场的起飞管理系统,如果由驾驶员自己管理,会导致混乱,因此需要一个中介者来管理。解决方案:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使耦合松散,而且可以独立地改变他们之间的交互。中介者模式可帮助你减少各种UI组件之间的互相依赖关系。原创 2024-09-24 09:00:00 · 954 阅读 · 0 评论 -
设计模式之迭代器
(Iterator) 是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。如果对C++中STL比较了解的话,学习此设计模式很容易。适用场景代码如下:问题:两个餐厅要合并,虽然两家菜单系统类似,但底层使用的数据结构不同,如何实现一个通用的菜单遍历器?解决方案:提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。原创 2024-09-22 19:27:53 · 1245 阅读 · 0 评论 -
设计模式之命令设计模式
(Command) 是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。适用场景(Sender)——亦称 “触发者 (Invoker)”——类负责对请求进行初始化, 其中必须包含一个成员变量来存储对于命令对象的引用。发送者触发命令, 而不向接收者直接发送请求。注意, 发送者并不负责创建命令对象: 它通常会通过构造函数从客户端处获得预先生成的命令。原创 2024-09-22 09:00:00 · 635 阅读 · 0 评论 -
设计模式之责任链
(Chain Of Responsibility) 是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。适用场景(Handler) 声明了所有具体处理者的通用接口。该接口通常仅包含单个方法用于请求处理, 但有时其还会包含一个设置链上下个处理者的方法。原创 2024-09-21 18:37:46 · 1129 阅读 · 0 评论 -
设计模式之代理
(Proxy) 是一种结构型设计模式, 为其他对象提供一种以控制对这个对象的。代码如下:问题:系统需要访问数据库,但需要对数据的访问做一些优化,例如缓存查询结果、生成访问日志、访问控制解决方案:为其他对象提供一种代理以控制这个对象的访问。即新建一个与原服务对象接口相同的代理类,代理将自己伪装成数据库对象,对客户而言是透明的。原创 2024-09-21 15:24:01 · 1362 阅读 · 0 评论 -
设计模式之享元
(Flyweight) 是一种结构型设计模式,它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。代码如下:问题:做一款生成冰激凌和雪糕的程序,要求可以扩展新的口味,并且可以扩展新的包装方式。解决方案:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。转载 2024-09-20 20:28:38 · 635 阅读 · 0 评论 -
设计模式之外观设计模式
(Facade) 是一种结构型设计模式, 为子系统中的提供一个一致的界面,此模式定义了,这个接口使得这一子系统更加容易使用。(Facade) 提供了一种访问特定子系统功能的便捷方式, 其了解如何重定向客户端请求, 知晓如何操作一切活动部件。创建(Additional Facade) 类可以避免多种不相关的功能污染单一外观, 使其变成又一个复杂结构。客户端和其他外观都可使用附加外观。(Complex Subsystem) 由数十个不同对象构成。原创 2024-09-19 20:26:21 · 1593 阅读 · 0 评论 -
设计模式之装饰设计模式
解决方案:动态的给饮料添加新的功能,而不需要修改饮料的代码。就增加功能来说,装饰模式比继承更加灵活。找出基本组件和可选层次。问题:饮料店订单系统,饮料有咖啡、奶茶、果汁,饮料可以加糖、加奶、加冰。就增加功能来说,Decorator 模式相比生成子类更为灵活。(Decorator) 是一种结构型设计模式,原创 2024-09-12 06:00:00 · 359 阅读 · 0 评论 -
设计模式之组合设计模式
问题:复杂订单的计算,有两类对象:产品和盒子。一个盒子中可以包含多个产品或者多个小盒子这些盒子中可以再包含产品或者小盒子,以此类推。解决方案:将对象组成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。(Component) 是一种结构型设计模式,将对象组合成。组合模式使得用户对单个对象和组合对象的使用具有。以表示“部分-整体”的层次结构。原创 2024-09-11 16:05:50 · 749 阅读 · 0 评论 -
设计模式之桥接模式
如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。在这种情况下,桥接模式可以灵活地组合不同的抽象化角色和具体化角色,并独立化地扩展。解决方案:将一个类的接口转换成客户希望的另外一个接口。问题:开发一款股票市场检测程序,会从不同来源下载XML格式的股票数据,然后向用户呈现出分析图表。设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。适配器实现了其中一个对象的接口, 并对另一个对象进行封装。,使它们都可以独立的变化。原创 2024-09-09 21:11:35 · 729 阅读 · 0 评论 -
设计模式之适配器模式
解决方案:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的类可以一起工作。问题:开发一款股票市场检测程序,会从不同来源下载XML格式的股票数据,然后向用户呈现出分析图表。适配器不仅可以转换不同格式的数据, 其还有助于采用不同接口的对象之间的合作。适配器模式通过封装对象将复杂的转换过程隐藏于幕后。被封装的对象甚至察觉不到适配器的存在。(Adapter)是一种结构型设计模式, 它能使不兼容的对象能够相互合作。适配器实现了其中一个对象的接口, 并对另一个对象进行封装。原创 2024-09-03 21:02:51 · 395 阅读 · 0 评论 -
设计模式之单例模式
(Singleton)是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。(Singleton) 类声明了一个名为获取实例的静态方法来返回其所属类的一个相同实例。单例的构造函数必须对客户端 (Client) 代码隐藏。调用方法必须是获取单例对象的唯一方式。new如果你的代码能够访问单例类, 那它就能调用单例类的静态方法。无论何时调用该方法, 它总是会返回相同的对象。适用场景(Singleton) 类声明了一个名为获取实例的静态方法来返回其所属类的一个相同实例。原创 2024-09-02 20:14:19 · 1264 阅读 · 0 评论 -
设计模式之原型设计模式
① 覆盖 clone 方法 ( 必须 ) : 必须重写对象的 clone 方法 , Java 中提供了 cloneable 标识该对象可以被拷贝 , 但是必须覆盖 Object 的 clone 方法才能被拷贝;② 流程简单 : 原型模式可以简化创建的过程 , 可以直接修改现有的对象实例的值 , 达到复用的目的;原型模式主要用于对象的复制,它的核心是就是类图中的原型类 Prototype。深拷贝是指当一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝。原创 2024-09-01 18:55:20 · 1450 阅读 · 0 评论 -
设计模式之生成器方法
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。简单来说就是封装一个复杂对象的构造过程,并允许按照步骤构造。代码及类图如下:1.构造一个房屋,需要考虑是否有车库,是否有游泳池,是否有地下室,是否有花园等,需要对诸多成员进行初始化工作。都写在构造函数里?每种可能都创建一个新的类?原创 2024-08-30 17:44:02 · 851 阅读 · 0 评论 -
深入了解23种设计模式——工厂方法
我们假设这样一种情况,当某个工厂一直用卡车进行运输,突然增加一个需求,需要增加轮船运输,那么怎么用代码实现?众所周知,c++是面向对象的语言,我们只要抽象出一个类,使它可以实现”轮船运输“的需求即可解决。但是如果面对工程量巨大的业务,增加这样一种需求是极为困难的。这个时候就需要一种能够使其过程尽可能简化的东西出来。我们把它叫做组件。怎么正确认识组件呢?你可以把它想象成一个螺丝钉,螺丝钉可以用于生活中的诸多方面。小到针针线线,大到航空航天,都需要用到螺丝钉。它的功能单一,但可以用于方方面面。原创 2024-08-16 11:41:01 · 456 阅读 · 0 评论