![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 74
优秀的邓宗磊
这是一个优秀的人呢
展开
-
c/c++,享元模式,数据池,只读对象共享与复用
享元模式:实例数量庞大的类需要拆分成变化部分和不变部分定义:使用共享对象可有效的支持大量的细粒度的对象。享元模式是池技术的重要实现方式,分配太多的对象到应用程序中会有损程序的性能,还容易造成内存溢出,使用享元模式的思想,细分数据对象,划分数据的内部状态和外部状态,减少创建数据对象的重复数据部分带来的内存损耗。翻译:1、程序由数据和算法组成,算法在数量上是固定的,但数据在数量上是无上限的,2、在数据量十分庞大时(比如双十一的电商购物数据量),数据类全部创建出来会让服务器无法正常运行,3、要避免创建原创 2021-12-17 20:13:58 · 699 阅读 · 0 评论 -
设计模式的术语,接口,基类,抽象,细节,高内聚,低耦合,解耦,附代码讲解
在设计模式中大部分用的是JAVA,其常常使用到类似接口,基类,抽象,细节这样的术语,经常使c/c++使用者犯迷糊,c/c++更接近底层,故没这么多的术语(虽然也不少),接下来我一一解释下在学习设计模式的过程中遇到的JAVA术语在c/c++中所代表的含义。如下列举几种继承关系方便说明:子类:public 父类{};//一个子类继承一个父类子类:public 父类1,public 父类2,public 父类3{};//一个子类继承多个父类子类1:public 父类{};子类2:pub原创 2021-09-22 22:56:27 · 286 阅读 · 0 评论 -
设计模式,中介者模式c++实现,避免多个类之间相互紧耦合
中介者模式:多对多关系变成多对一关系当多个类因功能函数的关系相互耦合时,用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式的相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。中间那个就是mediator中介者定义统一的接口,用于各个同事之间的通信周围的就是具体角色,这个例子中叫worker类每个角色都知道中介者角色,而且与其他同事通信时,一定要通过中介者角色协作。worker类的两种行为:自发行为(self-Method):改变自己的状态,处理自己的行为。依赖方法(原创 2021-10-02 17:46:26 · 450 阅读 · 0 评论 -
c++,设计模式,桥梁模式,父类定关系,子类去实现
桥梁模式定义:将抽象和实现解耦,使得两者可以独立的变化。翻译:重点是解耦,将抽象和实现解耦的意思是,将有依赖关系的类的依赖关系,就是:1、相互调用时互为参数和调用函数的关系,交给抽象基类实现,2、相互调用中实际被调用的函数,交给具体的功能子类实现,3、使得有依赖关系的类之间的依赖关系建立在基类上,4、具体的实现交给子类上层模块调用时也可以通过子类的扩展实现不同的组合,5、实现简单稳定的多态性。类图摘自设计模式之禅,看上去确实像个桥:桥梁模式中基础的4个角色:1、两个抽象角色实现依赖;原创 2021-12-17 19:39:45 · 652 阅读 · 0 评论 -
设计模式,单例模式,singleton,Instance,c++实现,一个国家一个国王
单例模式singleton定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。翻译:有一个类,在程序进程中只有一个,程序开始时自动初始化自己的实例,程序结束后被释放,程序员不用也无法手动new或delete那样一个类的对象,这个类的唯一的对象会在整个进程中发挥作用,可随时被进程中的任何函数访问。类图摘自设计模式之禅特点:单例类只有一个实例化的对象,这个对象的获取往往通过在类中设置Instance()/GetInstance()等方法获取,这是一般单例模式的默认命名,而只要原创 2021-11-07 17:43:26 · 693 阅读 · 0 评论 -
设计模式,状态模式:电梯先关门后移动,c++实现
状态模式:电梯想要移动首先得是关门的。定义:当一个对象内在状态改变时,允许其改变行为,这个对象看起来像改变了其类。翻译:就是没有某个状态,就不能做出某行为。因为类的动作一般是在任何情况下都可以调用的,受到状态的限制后,就像是基于不同的状态而换了不同的类一样,对着状态机理解就可。类图摘自设计模式之禅:state抽象状态角色,接口或抽象类:负责对象状态定义,封装环境角色以实现状态切换。封装对象的所有功能函数,已满足实现不同的状态。concretestate具体状态角色,两个职责:本状态的行为管原创 2021-10-17 18:06:15 · 603 阅读 · 0 评论 -
设计模式,访问者模式:(都在干活,干的咋样呢),c++实现
访问者模式:(都在干活,干的咋样呢)定义:封装一些作用于某些数据结构中的各个元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。类图摘自设计模式之禅:Visitor:抽象访问者,通过参数声明可以访问的元素。ConcreteVisitor:具体访问者,确定访问者访问一个类后的操作。Element:抽象元素,声明接收哪一类访问者访问,声明accept(visitor)ConcreteElement:实现accept(),一般是visitor.visit(this),基本上已经是原创 2021-10-17 14:09:30 · 89 阅读 · 0 评论 -
设计模式,安全的备忘录模式,c++实现,双接口,内置类提高安全性
通过双接口和内置类实现一个相对安全的备忘录模式封装的更好更安全一点:内置类和双接口1.建立一个空接口,里面放置一个public空方法,用于给子类实现和调用。2.给一个需要安全备份的类,然后在其中建立一个内置类(类中类,内置类可以访问外部类的内容,和类函数具有相同权限),并使这个内置类继承空接口,实现自己的业务逻辑(保存状态),确保外部类的备份业务是通过内置类实现的,3.内置类全部设置为private,以保证除发起者外任何其他类都访问不到,4.内置类通过其空接口(空父类)就可以将自己的指向的内容地址原创 2021-10-17 12:07:10 · 127 阅读 · 0 评论 -
设计模式,备忘录模式:(任务失败,回到检查点重来),c++实现
备忘录模式:(任务失败,回到检查点重来)定义:在不破坏封装性的前提下,捕捉一个对象的内部状态,并在对象之外保存这个状态,使其可以在以后将对象恢复到这个状态。翻译:一个类需要拥有一个备份类用来记录和恢复自己在某个时刻的状态,只需要复制自己,保留数据,删去功能函数,保留构造函数后,便是一个该类的数据备份类了,需要备份类的类的增加两个函数,是对备份类的get和set函数。类图摘自设计模式之禅:深入:但我们想要恢复某个状态时,肯定得恢复那个状态下的类以及周围受到其影响的类的状态,故备份类会和需要备原创 2021-10-17 11:19:19 · 114 阅读 · 0 评论 -
设计模式,门面模式,c++实现,委托,c++实现委托
委托:类a将功能委托类b实现翻译:在类a中包含一个功能类b指针或对象,用到b功能类的功能时通过其指针或者对象调用b的功能,在调用模块看来,问题是交给类a解决了,而实际上,类a通过其成员类b对象或指针解决的该问题,此过程为“a委托b完成了问题”。顺便一提:a依赖b指的是a类中包含一个b的基类的指针,就不一定是基类对象了,因为基类可能就是虚基类,产生不了对象。门面模式:或叫外观模式(是前台吗?来杯咖啡。)定义:将一个子系统的外部与内部的通信必须通过一个统一的对象进行。翻译:子系统:由一个或多个功能类原创 2021-10-16 21:59:09 · 107 阅读 · 0 评论 -
设计模式,观察者模式,c++实现,事件触发模式
观察者模式:定义:对象间一对多的依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新。在一对多的关系中,一为被观察者,多为观察者,被观察者依赖观察者。翻译翻译:被观察者类中有观察者类的基类,通常是一个基类指针容器,而这个基类中需要声明一个访问权限为public的函数(是否纯虚皆可,一般是纯虚函数,如果不需要被子类继承的话也可以不用virtual关键字,直接声明实现),用来在被观察者状态改变时被观察者调用触发观察者们的动作,这个函数一般把函数名写为Update(),默认好读而原创 2021-10-16 21:04:04 · 444 阅读 · 0 评论 -
设计模式,组合模式,c++实现,树形结构的设计模式
组合模式:用来描述部分与整体的关系,定义为:将对象组合成树形结构来表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。类图摘自设计模式之禅:抽象角色:组合对象的共有方法和属性。叶子:最小单位,无分支树枝:组合树枝和叶子形成树结构,常有容器和增删查函数。优点:高层模块调用简单(垂直管理),所有节点均是抽象角色,局部和整体对调用者来说没有区别,高层不用管自己处理的是单个还是整体,简化了高层模块的代码。节点水平自由增加,只要找到它的父节点就可,但不好垂直增加。缺点:有一原创 2021-10-16 20:27:00 · 306 阅读 · 0 评论 -
设计模式,适配器模式,c++,两个类之间的适配器类,贫血对象与充血对象
概念:贫血对象(thin business object)与充血对象(rich business object)有一个对象UserInfo存储用户的所有信息,也就是BO(Business Object,业务对象),这个对象设计为贫血对象,则是不需要存储状态以及相关的关系,对应的领域模型就是贫血领域模型;而有实体状态和对象关系的模型,就是充血模型,是常用于糊弄人的专用名词。摘自设计模式之禅,适配器模式篇。正如其字面意义,这两名词并没有什么意义,只是糊弄人而已,至少在适配器模式中是这样。适配器模式,两个原创 2021-10-16 17:16:49 · 226 阅读 · 0 评论 -
设计模式,策略模式,c++实现
策略模式,又叫政策模式定义:定义一组算法,将每个算法都封装起来,并使它们之间可以互换。这里说到的算法就是函数;封装起来就是用基类声明虚函数,用子类继承并实现功能;可以互换表示必须用基类作为与外部调用模块的耦合,而不使功能类与外部产生耦合;这种模式充分利用了对接口基类的继承,也导致了类数量的增多和复用性的减弱。当调用模块需要用到某种策略时,只需要临时生成一个该策略对象调用即可,一个执行模块对应多个策略。类图摘自设计模式之禅,如下:优点:通过对基类策略action()的封装,子类的扩展,保证原创 2021-10-16 16:24:02 · 78 阅读 · 0 评论 -
设计模式在开发和维护中发挥的作用
设计模式在开发过程和维护过程的作用是让代码好看,好懂,好维护。作用:让代码更加好看,好懂,好维护。设计模式不针对编程语言,而针对实际业务需求,帮助开发员定出合理的代码框架,使开发员写出好看,好懂,好维护的代码。好看:代码外形美观,清晰明了。好懂:开发员的代码可以比较简单的被另外的开发员看懂,降低相关的培训周期和成本。(参考网上的员工离职后被要求回公司讲解代码的故事,有可能就是在业务对应的设计模式上做了优异独特超于常人的设计)好维护:开发好的项目代码在不断更新和增加的用户需求下依然可以被相应的维护人原创 2021-10-10 17:41:55 · 198 阅读 · 0 评论 -
设计模式,装饰模式,c++实现,代理模式的扩展,防止继承带来的代码臃肿
装饰模式:设计模式中的小经验:类的频繁继承会导致类的数量膨胀带来维护上的困难,在面向对象的设计中,如果超过两层继承,就需要考虑是否出现了设计问题,得尝试改变思路。定义:动态的给一个对象添加一些额外的职责。这是一个基于代理模式,继承了其保护,封装的功能,又通过对代理类进行继承和扩展达到多态目的的一种模式,看上去类似于“给代理类化妆”。用装饰模式补充继承的原因:装饰模式的作用是“化妆”,继承的作用是“刻入DNA”,继承关系中子类会继承父类的所有代码,无论使用与否,造成极多无用的臃肿代码,装饰则通过继原创 2021-10-10 16:16:09 · 111 阅读 · 0 评论 -
设计模式,责任链模式详解,c++实现
责任链模式详解,c++实现责任链模式定义:使多个对象都有机会处理请求,避免请求的发送者和接受者的耦合关系,将处理对象连成链,并沿着这条链传递该请求,直到有对象处理它为止。重点在于“链”,由一条链处理相似的请求,在链中决定谁来处理这个请求,适合用于处理有等级限制的需求时。通用类图处理者Handler的三个职责:1.定义一个请求的处理等级判断方法handle()用于判断处理还是推向下一级,这应该是处理者唯一对外开放的方法,应该用final修饰使其不被更改,因在基类中确定了等级判断函数,故也用到了模原创 2021-10-10 13:13:25 · 122 阅读 · 0 评论 -
设计模式,命令模式,c++实现,提升内聚性,消除功能类与高层的耦合
命令模式:给功能类集设置一个接口人(执行者)执行所有需求命令,避免外部(调用者)直接调用某个功能类的内部函数产生大量耦合,用于类间解耦。命令模式是一个高内聚的模式,将一个请求封装为一个对象,使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可提供命令的撤销和恢复功能。优点:类间解耦:调用者与执行者之间无依赖关系,调用者实现功能时只需调用Command抽象类的excute方法就可以,无需了解是哪个接受者执行,这也使得上层的调用模块更加的简单易懂,提高代码的复用性和易维护性。可扩展:Comm原创 2021-10-04 11:45:28 · 221 阅读 · 0 评论 -
代理模式用途,c++实现
代理模式:为对象提供一个代理对象以更好的控制和修改程序员对这个对象的访问与使用。代理模式的运用极其广泛,最常见的作用:1.需要使用外部提供的接口。例如stl,或者动态库API函数等,其提供的接口函数有可能会发生改变,直接使用它们会使这些外部函数与项目工程有巨量的耦合,如果某个函数对象发生了改变(比如改了个名),就会导致在已有项目中使用到了这个接口函数的耦合需要全部被修改使程序员工作量陡增,解决这个问题的方法,就是用在项目中用一个类作为代理类封装这个外部接口,将耦合控制在这一个类中,用代理类管理外部接口原创 2021-10-02 16:17:47 · 246 阅读 · 0 评论 -
设计模式:原型模式,c/c++,避免new关键字和构造函数的clone方法
设计模式:原型模式在c/c++中的实现方法,实现避免new关键字和构造函数的clone()函数设计模式之原型模式:实现一个clone()方法用来拷贝自己的现成数据,用于对同一份内容有极大需求量或构造某对象有极大成本时,c++里面图方便也能实现在拷贝构造函数里。一、原型模式的作用:1.资源优化类初始化需要消耗非常多的资源,包括数据、硬件等2.性能与安全要求通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可用原型模式3.一个对象多个修改者一个对象需要提供给其他对象访问,且各个调用着可原创 2021-10-01 21:16:47 · 417 阅读 · 0 评论