设计模式
文章平均质量分 51
----
xinruoqianqiu
虽然从事工作好多年了,但感觉自己还是个菜鸟,从基础做起,做大做强。
展开
-
C++设计模式---单例模式
由于是在编译时确定的初始化,因此这种方式是线程安全的(在C++11及以后的版本中),并且不需要额外的同步机制。然而,在大多数情况下,这些缺点都是可以接受的,因为单例对象通常代表一些重要的系统资源或功能,需要尽早地初始化。通过单例模式可以创建一个缓存管理器,确保只有一个缓存实例存在,并且可以被多个线程共享,方便全局访问和统一管理缓存。当需要对资源进行集中管理,以确保线程安全的访问时,单例模式是一个不错的选择。当实例化一个类的成本较高,而且只需要一个实例时,可以使用单例模式来避免重复实例化的开销。原创 2024-06-08 16:47:53 · 1145 阅读 · 0 评论 -
C++设计模式---享元模式
当客户端请求一个享元对象时,享元工厂会首先检查是否已存在具有相同内部状态的享元对象,如果存在则直接返回该对象,否则创建一个新的享元对象并存储起来。(2)对象的创建和销毁代价较大:如果对象的创建和销毁需要消耗大量的计算资源或时间,使用享元模式可以通过复用已有的对象来避免不必要的创建和销毁操作,从而提高系统的性能。(1)系统中存在大量相似对象:当系统中需要创建大量细粒度的对象,并且这些对象具有相同的内部状态时,可以使用享元模式来减少对象的数量,节省内存空间。(2)提高了系统的性能,减少了对象的创建和销毁次数。原创 2024-06-27 08:00:00 · 771 阅读 · 0 评论 -
C++设计模式---组合模式
(1)组件(Composite):这个抽象类或接口定义了所有组件都具有的公共行为。它通常有一个或多个方法来访问其子组件,并且可以包含一个指向子组件的指针数组。(3)复合组件(Composite):这是有子组件的组件,它们除了实现组件接口外,还负责维护子组件的列表,以及调用相应的方法对它们进行操作。(2)具体组件(Leaf):这是没有子组件的组件,它们直接实现了组件接口。(3)可以统一处理所有类型的组件,无论是简单的还是复杂的。每个组件都可能包含一个或多个子组件,而不需要了解子组件的具体类型。原创 2024-06-14 08:30:00 · 194 阅读 · 0 评论 -
C++设计模式---访问者模式
访问者模式允许一个或者多个操作应用到一组对象上,而这些操作可以在不改变这些对象所属类的前提下进行定义和实现。:声明一个或多个访问具体元素的方法,方法的参数通常是具体元素类型。:能枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素。:实现抽象元素接口,通常有多个具体元素类。:实现抽象访问者声明的各个访问方法。:定义一个接受访问者的接口。原创 2024-07-11 08:15:00 · 226 阅读 · 0 评论 -
C++设计模式---原型模式
在这个过程中,不需要重新初始化新对象,而是直接复制原型对象的数据和结构,因此可以显著提高性能。原型模式特别适用于需要创建大量相似对象的情况,或者对象的创建过程非常耗时和资源密集。浅拷贝只会复制对象本身的属性值(如果是指针类型,则只复制指针地址,而不是指针指向的数据)。浅克隆只复制对象本身和对象中的值类型字段,对于引用类型字段,只复制引用但不复制引用的对象。而深克隆则复制对象本身和对象中的所有字段,包括引用类型字段引用的对象。深拷贝会复制对象本身的属性值,并且如果属性是指针类型,则还会复制指针指向的数据。原创 2024-06-13 08:30:00 · 361 阅读 · 0 评论 -
C++设计模式---解释器模式
(2)当系统中存在大量的重复的规则或表达式,并且这些规则或表达式可以被解释为特定的语言时,解释器模式也是一个不错的选择。(1)当需要解释和执行特定语法规则或表达式时,可以考虑使用解释器模式。解释器模式可以用于解决特定问题中的解释和执行问题,通常用于处理复杂的语法或规则。(1)可以灵活地扩展语法规则,增加新的解释器类来支持新的语法规则。(2)可以将语法规则和解释器分离,使得系统更加易于维护和扩展。原创 2024-07-11 08:45:00 · 250 阅读 · 0 评论 -
C++设计模式---状态模式
在C++中实现状态设计模式时,通常会定义一系列的状态类,每个类封装了与特定状态相关的行为,以及一个上下文(Context)类,该上下文类持有一个状态对象的引用,并根据这个状态对象的类型来执行相应的方法。: 负责处理Context在状态改变时的⾏为, 每⼀个具体状态⼦类实现⼀个与Context 的⼀个状态相关的⾏为。: 定义⼀个接口,⽤于封装与Context的⼀个特定状态相关的⾏为。: 维护⼀个具体状态⼦类的实例,这个实例定义当前的状态。原创 2024-07-05 08:30:00 · 290 阅读 · 0 评论 -
C++设计模式---迭代器模式
是⼀种使⽤频率⾮常⾼的设计模式,在各个语⾔中都有应用,其主要⽬的是提供⼀种统⼀的⽅式来访问⼀个聚合对象中的各个元素,而不需要暴露该对象的内部表示。:定义访问和遍历元素的接⼝, 通常会包括hasNext() ⽅法⽤于检查是否还有下⼀个元素,以及next() ⽅法⽤于获取下⼀个元素。:实现在抽象聚合类中声明的createIterator() ⽅法,返回⼀个与具体聚合对应的具体迭代器。:定义了创建迭代器的接⼝,包括⼀个createIterator ⽅法⽤于创建⼀个迭代器对象。原创 2024-07-04 09:15:00 · 557 阅读 · 0 评论 -
C++设计模式---装饰器模式
(3)装饰器(Decorator):实现与组件相同的接口,它包含一个指向组件对象的指针(或者引用),并可以在调用组件的方法之前或之后添加一些额外的功能。(4)具体装饰器(ConcreteDecorator):实现装饰器接口,并添加一些额外的职责。(2)具体组件(ConcreteComponent):实现组件接口,是被装饰器装饰的对象。(1)组件(Component):定义一个对象接口,可以给这些对象动态地添加职责。(2)使用装饰器,在animal下增加一个功能类;(1)为每个动物设计三个功能子类;原创 2024-06-12 08:00:00 · 409 阅读 · 0 评论 -
C++设计模式---代理模式
(1)远程代理(Remote Proxy):为一个位于不同地址空间的对象提供一个本地的代理对象,这个对象作为该远程对象的代表,以隐藏一个对象存在于不同地址空间的事实。代理对象在客户端和目标对象之间起到中介的作用,可以隐藏目标对象的实现细节,增加额外的功能(如访问控制、日志记录、性能监控等),或者对目标对象的访问进行优化。(2)代理对象(Proxy):持有目标对象的引用,控制对目标对象的访问,并可能提供额外的功能。(1)目标对象(Real Subject):代理对象所代表的真实对象,是最终要引用的对象。原创 2024-06-15 14:48:06 · 561 阅读 · 0 评论 -
C++设计模式---工厂模式
抽象工厂模式:优点:可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。抽象工厂模式:适用于系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品的情况。抽象工厂模式:每个具体工厂类可以创建多个具体产品类的实例,即一个工厂可以创建属于同一产品族但不同等级结构的产品。抽象工厂模式:无需指定产品的具体类,访问类可以通过抽象工厂接口获取同族的不同等级的产品。抽象工厂模式:有多个抽象产品类,每个抽象产品类都可以派生出多个具体产品类。),每个产品族都有两个具体产品(原创 2024-06-08 16:47:31 · 883 阅读 · 0 评论 -
C++设计模式----命令模式
其允许将请求封装成⼀个对象(命令对象,包含执⾏操作所需的所有信息),并将命令对象按照⼀定的顺序存储在队列中,然后再逐⼀调用执⾏,这些命令也可以⽀持反向操作,进⾏撤销和重做。(2)创建具体命令类(Concrete Command):继承自抽象命令类,实现具体的命令操作,同时持有一个命令接收者对象。(1)定义抽象命令类(Command):创建一个抽象类或者接口,其中包含一个纯虚的执行方法,用于执行具体的命令操作。(1)可能导致系统类的数量增加:需要定义多个命令类和相关的处理类。原创 2024-07-04 08:30:00 · 350 阅读 · 0 评论 -
C++设计模式---策略模式
策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的内部算法。策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。(2)具体策略角色(concrete strategy):封装了相关的算法和行为。(3)环境角色(context):持有一个策略类的引用,最终给客户端调用。(1)抽象策略角色(strategy):抽象策略类。实现0、1、2三种模式,打印三种模式下的内容。原创 2024-06-10 20:15:00 · 414 阅读 · 0 评论 -
C++设计模式---建造者模式
使用建造者模式可以将对象的创建过程封装在建造者类中,只向客户端提供构建对象的接口,从而隐藏了对象的创建细节。(2.1)当对象的创建流程是固定的,即无论创建多少个对象,其构建步骤都是相同的时候,可以使用建造者模式。建造者模式(Builder Pattern)是一种对象构建的设计模式,它允许你以一种逐步的方式创建复杂对象,同时隐藏了对象的内部表示和装配过程。(1.2)例如,在构建一个包含多个属性(如底盘、发动机、轮胎等)的汽车对象时,使用建造者模式可以确保每个属性都得到正确的初始化。原创 2024-06-13 08:45:00 · 559 阅读 · 0 评论 -
C++设计模式---观察者模式
(1)主题(Subject):主题是一个接口,可以把所有观察者对象登记到其观察者列表中,并且当它的内部状态发生改变时,会自动通知所有登记过的观察者对象。【在类内部建立一个vector记录所有的观察者,当主体发生变化时,遍历通知】。(4)具体观察者(ConcreteObserver):具体观察者实现了观察者接口,该接口保持一个指向具体主题的引用,以便在主题状态发生改变时得到通知。(3)观察者(Observer):观察者是一个接口,为所有的具体观察者定义一个更新接口,使得在得到主题的通知时更新自己。原创 2024-06-10 20:00:00 · 1227 阅读 · 0 评论 -
C++设计模式---模版方法模式
在抽象类中定义一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个步骤,在其子类中可以重复定义并实现一个算法的各个步骤。具体子类是抽象类的子类,用于实现在父类中定义的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中实现的具体基本操作。(2)是一种类库技术,提取累的公共行为,将公共行为放在父类中,而通过其子类可以实现不同的行为。(3)提供了一种反向的控制结构,通过一个父类调用其子类的操作,通过对子类的扩展而增加新行为。(1)模板方法模式可以在子类中定义详细的处理算法时不会改变算法的结构。原创 2024-06-27 08:15:00 · 410 阅读 · 0 评论 -
C++设计模式---职责链模式
实现处理请求的⽅法,并判断能否处理请求,如果能够处理请求则进⾏处理,否则将请求传递给下⼀个处理者。:定义⼀个处理请求的接⼝,包含⼀个处理请求的抽象⽅法和⼀个指向下⼀个处理者的链接。:创建并组装处理者对象链,并将请求发送到链上的第⼀个处理者。原创 2024-07-05 09:00:00 · 168 阅读 · 0 评论 -
C++设计模式----桥接模式
通过调用“Attribute”类的方法和“Skill”类的方法,可以处理人物角色的属性和技能。图形界面库通常提供一组通用的界面元素(如按钮、文本框、下拉菜单等),同时也提供多种不同的绘制方式(如窗口系统的绘制、OpenGL的绘制等)。在国际化应用中,桥接模式可以将界面的逻辑(如按钮、标签、提示信息等)与具体语言环境(如英文、中文、法文等)分离。在游戏开发中,人物角色通常具有多种不同的属性和技能(如力量、敏捷、法力等),同时人物角色还可以使用多种不同的武器和装备(如剑、弓、盾等)。(2)操作系统文件系统。原创 2024-06-14 08:00:00 · 938 阅读 · 0 评论 -
C++设计模式---中介者模式
中介者模式(Mediator Pattern)也被称为调停者模式,是⼀种⾏为型设计模式,它通过⼀个中介对象来封装⼀组对象之间的交互,从⽽使这些对象不需要直接相互引⽤。: 实现抽象同事类接⼝,每个具体同事类只知道⾃⼰的⾏为,⽽不了解其他同事类的情况,因为它们都需要与中介者通信,通过中介者协调与其他同事对象的交互。: 实现抽象中介者接⼝,负责协调各个具体同事对象的交互关系,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。: 定义同事类的接⼝,维护⼀个对中介者对象的引⽤,⽤于通信。原创 2024-07-10 08:00:00 · 298 阅读 · 0 评论 -
C++设计模式---适配器模式
1、介绍1、介绍适配器模式主要包含三种角色:(1)目标接口(Target):客户端所期望的接口。目标接口可以是抽象类或接口,定义客户端期望的方法。(2)适配者(Adaptee):现有需要适配的接口。适配者通常是一个已经存在的类,其接口不符合客户端的期望。(3)适配器(Adapter):适配器类是适配器模式的核心。适配器将客户端的请求转换为对适配者的相应接口的调用。适配器可以是抽象类的子类,也可以是接口的实现类。适配器通过继承或持有适配者的方式,实现目标接口并调用适配者的方法。原创 2024-06-12 08:30:00 · 273 阅读 · 0 评论 -
C++设计模式---外观模式
(1)Facade(外观):这是客户端调用的接口,它知道哪些子系统类负责处理请求,并将客户端的请求代理给适当的子系统对象。(2)Subsystems(子系统):这些是实现系统功能的类,但客户端通常不直接与之交互。这种模式隐藏了子系统的复杂性,并为客户端提供了一个简单的接口。(2)解耦客户端和子系统。(5)多个复杂类交互简化。(3)隐藏子系统复杂性。(4)游戏配置设置。原创 2024-06-15 14:47:50 · 184 阅读 · 0 评论 -
C++设计模式---备忘录模式
备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后将对象恢复到原先保存的状态。(1)发起人(Originator):这是需要保存和恢复状态的对象。发起人通常包含需要保存的状态数据,以及创建备忘录和从备忘录中恢复状态的方法。(3)管理者(Caretaker):负责管理备忘录的对象。它可以保存多个备忘录对象,并提供对备忘录的访问,通常提供了保存和恢复状态的接口。(2)备忘录(Memento):用于存储发起人对象状态的对象。原创 2024-07-10 09:00:00 · 430 阅读 · 0 评论