CPP 设计模式
文章平均质量分 85
cpp 设计模式,洞悉设计模式的精髓
jxusthusiwen
这个作者很懒,什么都没留下…
展开
-
设计模式 22 访问者模式 Visitor Pattern
访问者模式是一种行为型设计模式,它允许你在不改变已有类结构的情况下,为一组对象添加新的操作。它将算法与对象结构分离,使你能够在不修改现有类的情况下,为这些类添加新的操作。访问者模式是一种强大的设计模式,但需要谨慎使用。在实施访问者模式时,需要仔细考虑元素接口和访问者接口的设计,以及具体访问者类的实现。同时,需要了解访问者模式的局限性,并选择合适的应用场景。原创 2024-05-28 20:44:50 · 1051 阅读 · 0 评论 -
设计模式 21 备忘录模式 Memento Pattern
备忘录模式是一种行为型设计模式,它允许你将一个对象的状态保存到一个独立的“备忘录”对象中,并在之后恢复到该状态。备忘录模式是一种强大的设计模式,可以帮助我们实现状态的保存和恢复功能。在使用备忘录模式时,需要注意封装性、管理、性能、安全性以及使用场景等方面,以确保其有效性和安全性。原创 2024-05-28 18:04:10 · 914 阅读 · 0 评论 -
设计模式 20 中介者模式 Mediator Pattern
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装对象之间的交互,促进对象之间的解耦合。中介者模式的核心思想是引入一个中介者对象,将系统中对象之间复杂的交互关系集中管理,使得对象之间不直接相互通信,而是通过中介者进行通信,从而降低对象之间的耦合度,提高系统的可维护性和扩展性。在中介者模式中,中介者对象充当了协调者的角色,负责处理系统中各个相互关联对象之间的交互,对于系统其他对象来说,与中介者进行通信是唯一的接口。原创 2024-05-27 20:44:55 · 1024 阅读 · 0 评论 -
设计模式 19 模板模式 Template Pattern
模板模式(Template Pattern)是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中。在模板模式中,定义了一个抽象类,其中包含了一个模板方法(template method),这个方法定义了算法的基本结构和步骤,但其中的具体步骤由子类来实现。模板模式主要用于在不同子类中封装通用的行为,同时保持整体算法结构的一致性。通过模板方法模式,使得父类能够控制方法的执行顺序,同时细节延迟到子类实现。通过模板模式,可以实现代码复用、减少重复代码的编写,同时保持算法的统一性和一致性。原创 2024-05-27 20:02:18 · 1237 阅读 · 0 评论 -
设计模式 18 迭代器模式 Iterator Pattern
迭代器模式 (Iterator Pattern) 是一种行为型设计模式,它提供了一种访问集合元素的标准方法,而无需暴露集合的内部表示。提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。核心思想来自将遍历集合的逻辑从集合本身中分离出来,封装到一个独立的迭代器对象中。迭代器对象负责维护遍历的当前位置,并提供访问下一个元素的方法。想象一个书架,上面摆满了书籍。直接访问: 你直接走到书架前,从最左边开始一本一本地拿书阅读。原创 2024-05-26 16:11:21 · 1402 阅读 · 0 评论 -
设计模式 17 组合模式 Composite Pattern
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。它允许你将对象组合成树形结构,以表示“部分-整体”层次关系。原创 2024-05-26 09:33:00 · 1107 阅读 · 0 评论 -
设计模式 16 解释器模式 Interpreter Design Pattern
解释器模式 (Interpreter Design Pattern) 是一种行为型设计模式,它定义了一种语法表示,并提供了一种解释器来解释该语法表示的句子。核心概念:语法表示 (Grammar): 定义了语言的结构和规则,通常使用上下文无关文法 (Context-Free Grammar) 来表示。解释器 (Interpreter): 一个对象,它根据语法规则解析和执行语言的句子。主要组成部分:抽象解释器 (AbstractExpression): 定义解释器的接口,包含解释方法。原创 2024-05-21 22:50:30 · 941 阅读 · 0 评论 -
设计模式 15 Decorator Pattern 装饰器模式
Decorator Pattern 装饰器模式是一种结构型设计模式,它允许在运行时给对象添加新的行为或职责,而无需修改对象的源代码。这种模式通过创建一个包装对象,也称为装饰器,来包裹原始对象,装饰器对象与原始对象有相同的接口,因此可以在不改变客户端代码的情况下,增加或修改对象的功能。装饰器模式的优点包括:动态地给对象添加新的行为,而无需修改对象的源代码或继承结构。可以独立地增加对象的功能,因为每个装饰器都是独立的类。保持了类的单一职责,使得代码更易于维护和扩展。原创 2024-05-20 19:09:21 · 715 阅读 · 0 评论 -
设计模式14- Chain of Responsibility Method 责任链设计模式
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式。它通过把请求从一个对象传到链条中的下一个对象的方式,直到请求被处理完毕,以实现解耦。责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它使得多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。该模式把这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。原创 2024-05-15 20:12:39 · 705 阅读 · 0 评论 -
设计模式-13 - Prototype Design Pattern 原型设计模式
原型设计模式是一种创建对象的方式,它通过复制一个现有的对象(原型)来创建一个新对象。仅在需要创建大量相同对象时才使用原型设计模式,考虑使用对象池来管理克隆对象的创建和销毁,使用原型设计模式来创建不可变对象,以避免意外修改。探索其他设计模式,例如工厂方法模式或单例模式,以了解它们如何与原型设计模式一起使用。通过遵循这些最佳实践,您可以有效且高效地使用原型设计模式来创建对象并提高应用程序的性能。原创 2024-05-14 18:59:09 · 583 阅读 · 0 评论 -
设计模式-12 - Adapter Pattern 适配器设计模式
适配器模式是一种结构型设计模式,它允许具有不同接口的两个类一起工作。它通过创建一个适配器类来实现这一点,该适配器类将一个类的接口转换为另一个类所需的接口。自定义的适配器,需要考虑确保其既能满足当前需求,又能保持良好的扩展性,为未来需求预留扩展性。原创 2024-05-14 12:26:57 · 528 阅读 · 0 评论 -
设计模式-11 - Bridge Method 桥接模式
桥接模式是一种设计模式,它将抽象部分与其实现部分分离,使它们可以独立变化。它允许你改变抽象部分和实现部分的实现,而无需更改它们的接口。结构:抽象(Abstraction):定义抽象接口,客户端代码与之交互。实现(Implementor):实现抽象接口并提供具体行为。扩展抽象(Refined Abstraction):扩展抽象接口,提供更加具体的接口。具体实现(Concrete Implementor):实现扩展抽象接口并提供具体的实现。一个常见的桥接模式示例是图形绘制库。原创 2024-05-13 17:42:52 · 720 阅读 · 0 评论 -
设计模式-09 - 享元模式 flyweight pattern
享元模式是一种设计模式,它使用共享对象来减少内存使用和提高性能。它通过存储共享的对象实例池来实现,这些实例可以被多个客户端同时使用。享元模式定义了一个接口,使客户端可以访问共享的轻量级对象。享元可以根据其内部状态进行细分,客户端只需要提供它需要的状态即可。享元对象被存储在共享池中,如果客户端请求一个已经存在的享元,则会返回该享元,否则会创建一个新的享元并将其添加到池中。| || || || |Flyweight Factory:创建和管理享元对象。原创 2024-05-11 18:53:18 · 639 阅读 · 1 评论 -
设计模式-08 - 模板方法模式 Template Method
模板方法模式是一种设计模式,它定义了一个操作的骨架,而由子类来决定如何实现该操作的某些步骤。它允许子类在不改变算法结构的情况下重定义算法的特定步骤。模板方法模式适合用于以下情况:需要定义一个算法的骨架,但允许子类实现特定步骤:例如,一个排序算法,其中骨架定义了排序过程,而子类定义了具体的比较方法。需要避免在子类中重复代码:例如,一个图形绘制框架,其中抽象类定义了绘制过程的骨架,而子类定义了绘制特定形状的具体方法。原创 2024-05-10 19:38:59 · 691 阅读 · 0 评论 -
设计模式-07 设计模式-观察者模式(Observer Pattern)
观察者模式是一种软件设计模式,它定义了一种一对多的依赖关系,其中一个对象(称为“主题”)维护了一个依赖对象的列表(称为“观察者”),并且当主题的状态发生变化时,它会自动通知所有观察者。仅在需要时使用观察者模式。它可能会引入一些开销和复杂性。心中明白清楚地定义观察者订阅和取消订阅的机制。考虑使用观察者模式的变体,例如发布/订阅模式或模型-视图-控制器 (MVC) 模式。在设计观察者模式时,牢记 SOLID 原则(单一职责、开放/封闭、里氏替换、接口隔离和依赖反转)。原创 2024-05-09 19:14:42 · 491 阅读 · 0 评论 -
设计模式-06 设计模式-Facade Pattern门面模式
门面模式(Facade Pattern)定义门面模式为一个子系统提供了一个统一的接口,从而简化了对该子系统中多个组件的访问。它通过为客户端提供一个单一的入口点来隐藏子系统的复杂性,从而使客户端能够以更简单的方式与子系统交互。门面模式结构Facade(门面):这是一个包装类,提供了一个简化的接口来访问子系统。Subsystem(子系统):这是门面模式表示的实际子系统。它由多个组件组成,这些组件共同提供一些功能。门面模式工作原理客户端通过门面类与子系统进行交互。原创 2024-05-08 20:17:17 · 975 阅读 · 1 评论 -
设计模式-05 设计模式-命令行设计模式 Command Pattern
命令模式是一种设计模式,它将请求封装成一个对象,从而使您可以用不同的方式参数化请求、队列请求以及支持可撤销的操作。命令模式将一个请求封装成一个对象,从而使您可以用不同的方式参数化请求、队列请求以及支持可撤销的操作。将请求封装成对象:命令模式将每个请求封装成一个独立的对象,称为“命令”对象。参数化请求:命令对象可以存储与请求相关的所有信息,包括接收者、动作和任何其他必要的参数。队列请求:命令对象可以存储在一个队列中,以便按顺序或并发执行。原创 2024-05-08 18:15:45 · 687 阅读 · 0 评论 -
设计模式-04 设计模式-Proxy Pattern 代理模式
代理模式 为一个对象提供一个代理或占位符,以便控制对该对象的访问和操作。代理可以拦截并修改对目标对象的调用,从而实现以下目的:控制访问:限制对敏感或昂贵对象的访问,只允许经过身份验证或授权的用户访问。延迟实例化:推迟创建昂贵或耗时的对象,直到真正需要时才创建。提供额外的功能(日志记录,监控):在不修改目标对象的情况下,向目标对象添加额外的功能,例如日志记录、缓存或安全检查。缓存功能:对于昂贵的对象,可以减少重复创建,减少调用真实对象的次数| || |v。原创 2024-05-06 17:14:58 · 634 阅读 · 0 评论 -
设计模式-03 设计模式-工厂模式factory-内部工厂
内部工厂模式是一种创建类对象的方式,其中工厂方法被封装在类内部,客户端只能通过类的公共接口来访问。内部工厂模式允许子类创建和管理自己的实例,而无需通过外部或父级工厂介入。这在需要有多个工厂来生成特定类型对象的不同变体或实现时很有用。如果符合这种场景,可以采用内部工厂设计模式。原创 2024-05-04 19:32:36 · 718 阅读 · 0 评论 -
设计模式-02 设计模式-工厂模式factory
工厂模式是一种创建型设计模式,它定义了一个创建对象的接口,让子类决定实例化哪一个类。工厂模式使程序不必指定要创建产品的具体类,从而解耦应用程序与实际创建产品的具体类。工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。| || || | || | | || |工厂模式提供了一种创建对象而不指定其具体类的接口。原创 2024-05-03 20:31:42 · 665 阅读 · 1 评论 -
设计模式-04 设计模式-Builder
建造者模式(Builder Pattern)是一种创建型设计模式,它允许你使用不同的构建步骤来创建复杂的对象。建造者模式的定义是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。指挥者/ \\/ \\/ \\具体建造者 A 具体建造者 B| |/ || || || || || 已构建的产品 |指挥者负责协调建造过程,它告诉建造者要创建哪些部分以及如何组装它们。具体建造者代表不同的产品类型或变体。每个具体建造者负责构建产品的一个或多个部分。原创 2024-05-02 18:33:48 · 1406 阅读 · 1 评论 -
设计模式-03 设计模式-依赖倒转原则案例分析
依赖倒转原则(Dependency Inversion Principle,简称DIP)高层级的模块不能依赖底层级模块的,两种层级的模块应该依赖抽象,抽象层不能依赖具体实现层,具体实现应该依赖抽象通俗来说,DIP 意味着:客户端代码(高层模块)不应该直接依赖于具体实现(低层模块)。相反,客户端代码应该依赖于一个抽象,而抽象再依赖于具体实现。| 客户端代码 |V| 抽象类 |V| 具体实现类 |客户端代码(高层模块)依赖于抽象类,而不是具体的实现类。原创 2024-05-01 17:03:50 · 751 阅读 · 0 评论 -
设计模式-02 设计模式-接口隔离原则案例分析
接口隔离原则(Interface Segregation Principle,简称 ISP)是设计模式中的一个原则,它规定客户端不应该依赖它不使用的方法。换句话说,接口应该被细分为更小的、更具体的接口,以便客户端只依赖于它们需要的方法。(客户端)V(公共行为) (特定行为) (特定行为)| I公共接口 | | I特定接口1 | | I特定接口2 || | |V V V| 客户端1 | | 客户端2 | | 客户端3 |应用 ISP 时,权衡其优点和缺点非常重要。原创 2024-05-01 16:22:54 · 1096 阅读 · 0 评论 -
设计模式-01 设计模式单例模式
单例模式是一种设计模式,它确保一个类只能被实例化一次。它通过在类内部创建类的唯一实例并提供一个全局访问点来实现这一点。优点:全局访问:单例对象可以从应用程序的任何地方访问。资源节约:它只创建一个对象,从而节省了内存和资源。线程安全性:如果单例对象正确实现,它可以是线程安全的,这意味着它可以在多线程环境中安全地使用。C++11 中的单例模式通过双重检查锁定和 RAII 技术实现线程安全的惰性实例化,确保全局访问和资源管理。在实现上,这比起低版本的来说,预言特性给我们更加灵活的操作性。原创 2024-04-30 17:01:54 · 1606 阅读 · 1 评论 -
设计模式-01 设计模式简介之分类
设计模式,分类原创 2024-04-25 22:30:48 · 1340 阅读 · 0 评论 -
设计模式-00 设计模式简介之几大原则
设计模式相关的浅解,并运用modern cpp 来是实现,描述相关设计模式原创 2024-04-23 22:46:11 · 1080 阅读 · 1 评论