![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++设计模式
C++设计模式
NGC_2070
纸上得来终觉浅,绝知此事要躬行!
展开
-
设计模式之状态模式
目录状态模式state概念模式选择角色和职责案例状态模式state概念State模式也叫状态模式,是行为设计模式的一种。State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。模式选择角色和职责Context:用户对象 拥有一个State类型的成员,以标识对象的当前状态.原创 2020-08-04 15:29:31 · 303 阅读 · 0 评论 -
设计模式之迭代器模式
目录迭代器模式iterator概念角色和职责案例迭代器模式iterator概念Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。 在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题。或者说,如果不使用Iterator模式,会存在什么问题。 1.由容器自己实现顺序遍历。直接在容器类里直接添加顺序遍历方法 2.让调用者自己实现遍历。直接暴露数.原创 2020-08-04 15:39:32 · 163 阅读 · 0 评论 -
设计模式之解释模式
目录解释模式interpreter概念角色和职责案例解释模式interpreter概念一些应用提供了内建(Build-In)的脚本或者宏语言来让用户可以定义他们能够在系统中进行的操作。Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子。 Interpreter模式提供了这样的一个实现语法解释器的框架,笔者曾经也正在构建一个编译系统Visual CMCS,现在已经发布了Visual CMCS 1.0原创 2020-08-04 15:34:19 · 414 阅读 · 0 评论 -
设计模式之访问者模式
目录访问者模式visitor概念角色和职责案例访问者模式visitor概念Visitor模式也叫访问者模式,是行为模式之一,它分离对象的数据和行为,使用Visitor模式,可以不修改已有类的情况下,增加新的操作角色和职责。角色和职责抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。 具体访问者(ConcreteVisitor)角色:实现抽象访问者角色所声明的接口,也就是抽象访问者所声明的各个访问操作。 抽象节点(Ele原创 2020-08-04 15:15:17 · 152 阅读 · 0 评论 -
设计模式之备忘录模式
目录备忘录模式mememto概念应用场景角色和职责案例备忘录模式mememto概念Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。应用场景如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。 一个类需要保存它的对象的状态(相当于Originator角色) 设计一个类,该类只是用来保存上述对象的状态(相当于Mem原创 2020-08-04 13:53:11 · 164 阅读 · 0 评论 -
设计模式之观察者模式
目录观察者模式observer概念角色和职责典型应用案例观察者模式observer概念Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。 Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。角色和职责Subject(被观察者) 被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一原创 2020-08-04 12:45:18 · 157 阅读 · 0 评论 -
设计模式之中介者模式
目录中介者模式mediator概念角色和职责案例中介者模式mediator概念Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。角色和职责GOOD:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变原创 2020-08-03 22:50:27 · 166 阅读 · 0 评论 -
设计模式之策略模式
目录策略模式概念角色和职责案例策略模式概念Strategy模式也叫策略模式是行为模式之一。 它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法的切换 。 角色和职责Strategy: 策略(算法)抽象。 ConcreteStrategy 各种策略(算法)的具体实现。 Context 策略的外部封装类,或者说...原创 2020-08-03 19:48:25 · 198 阅读 · 0 评论 -
设计模式之责任链模式
目录责任链模式概念角色和职责案例责任链模式概念Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一。 该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。 例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。 首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,...,直到D完成d部分。 .原创 2020-08-03 19:16:29 · 171 阅读 · 0 评论 -
设计模式之命令模式
目录命令模式command概念角色和职责案例命令模式command概念Command模式也叫命令模式 ,是行为设计模式的一种。Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。 在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是: 创建目标对象实例; 设置调用参数; 调用目标对象的方法。 但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。 整个调用过程比原创 2020-08-03 18:14:49 · 180 阅读 · 0 评论 -
设计模式之模板模式
目录模板模式template概念应用场景总结角色和职责案例模板模式template概念Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。应用场景Template Method模式一般应用在具有以下条件的应用中: 具有统一的操作步骤或操作过程 具有不同的操作细节 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同 总原创 2020-08-03 17:12:55 · 515 阅读 · 0 评论 -
设计模式之享元模式
目录享元模式flyweight概念角色和职责案例享元模式flyweight概念Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。 在面向对象系统的设计何实现中,创建对象是最为常见的操作。 这里面就有一个问题: 如果一个应用程序使用了太多的对象,就会造成很大的存储开销。 特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为没有字母创建一个对象的话,系统可能会因为大量的对象而造成存储开销的浪费。原创 2020-07-28 00:48:29 · 152 阅读 · 0 评论 -
设计模式之外观模式
目录外观模式façade概念角色和职责案例外观模式façade概念Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。 Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。 这个一致的简单的界面被称作facade。角色和职责Façade 为调用方, 定义简单的调用接口。 Clients 调用者。通过Facade接口调用提供某功能的内部类群。 Packages 功能提供者。指提供功能的类群(模块原创 2020-07-28 00:38:28 · 119 阅读 · 0 评论 -
设计模式之组合模式
目录组合模式概念角色和职责案例组合模式概念Composite模式也叫组合模式,是构造型的设计模式之一。 通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。角色和职责Component (树形结构的节点抽象) - 为所有的对象定义统一的接口(公共属性,行为等的定义) - 提供管理子节点对象的接口方法 - [可选]提供管理父节点对象的接口方法 Leaf (树形结构的叶节点) Component的实现子类 Composite(树形结原创 2020-07-27 20:54:52 · 136 阅读 · 0 评论 -
设计模式之桥接模式
目录桥接模式bridge概念角色和职责案例桥接模式bridge概念Bridge 模式又叫做桥接模式,是构造型的设计模式之一。 Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。 它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。角色和职责Client Bridge模式的使用者 Abstraction 抽象类接口(原创 2020-07-27 20:19:49 · 160 阅读 · 0 评论 -
设计模式之适配器模式
目录适配器模式adapter概念角色和职责案例适配器模式adapter概念Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。角色和职责适用于: 是将一个类的接口转换成客户希望的另外一个接口。 使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 案例class Current18v{public: void use18vCurrent() { cout << "使用原创 2020-07-27 19:33:57 · 153 阅读 · 0 评论 -
设计模式之装饰模式
目录装饰模式概念类图角色和职责案例装饰模式概念装饰( Decorator )模式又叫做包装模式。 通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。 装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。类图角色和职责适用于: 装饰者模式(DecoratorPattern)动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活.原创 2020-07-27 19:05:46 · 139 阅读 · 0 评论 -
设计模式之代理模式
目录代理模式概念类图角色和职责案例1案例2代理模式概念Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。 所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。类图角色和职责subject(抽象主题角色): 真实主题与代理主题的共同接口。 RealSubject(真实主...原创 2020-07-27 18:02:42 · 138 阅读 · 0 评论 -
设计模式之原型模式
目录原型模式(prototype)概念角色和职责案例原型模式(prototype)概念Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。 目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。 根据对象克隆深度层次的不同,有浅原创 2020-07-27 17:12:21 · 183 阅读 · 0 评论 -
设计模式之建造者模式
目录建造者模式概念角色和职责创建者模式和工厂模式的区别案例建造者模式概念Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。 Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象: 被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的原创 2020-07-27 16:47:36 · 136 阅读 · 0 评论 -
设计模式之抽象工厂
目录抽象工厂概念产品族和产品等级结构模式中包含的角色及其职责案例抽象工厂概念抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。 抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。 产品族和产品等级结构备注1:工厂模式:要么生产香蕉、要么生产苹果、要么生产西红柿;但是不能同时生产一个产品族。 抽象工厂:能同时生产一个产品族。===> 抽象工厂存在原因 解释:具体工厂在开闭原...原创 2020-07-27 01:33:43 · 163 阅读 · 0 评论 -
设计模式之工厂模式
目录工厂模式概念类图角色和职责工厂方法模式和简单工厂模式比较案例工厂模式概念工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。类图角色和职责抽象工厂(Creator)角色 工厂方法..原创 2020-07-27 01:04:21 · 203 阅读 · 0 评论 -
简单工厂模式
目录简单工厂模式什么是简单工厂模式模式中包含的角色及其职责简单工厂模式的优缺点案例 1案例 2简单工厂模式什么是简单工厂模式简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。 通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。模式中包含的角色及其职责工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 抽象(Product)角色 简单工厂模式所.原创 2020-07-26 23:26:06 · 163 阅读 · 0 评论 -
设计模式之单例模式
单例模式概念单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。 GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。为什么使用单例模式在应用系统开发中,我们常常有以下需求: 在多个线程之间,比如初始化一次socket资源;比如servlet环境,共享同一个资源或者操作同一个对象 在整个程序空间使用全局变量,共享资源 大规模系统中,为了...原创 2020-07-26 22:55:11 · 189 阅读 · 0 评论 -
设计模式基本原则
目录设计模式基本原则设计模式几项原则开放封闭原则 (OCP,Open For Extension, Closed For Modification Principle)单一职责原则 (SRP,Single Responsibility Principle)依赖倒置原则 (DIP,Dependence Inversion Principle)接口隔离原则 (ISP,Interface Segegation Principle)里氏替换原则 (LSP, Liskov Substi..原创 2020-07-26 21:21:32 · 926 阅读 · 0 评论 -
UML 对象图、时序图、活动图 、状态图、协作图 、包图、组件图及部署图
UML 对象图、时序图、活动图 、状态图、协作图 、包图、组件图及部署图目录对象图时序图活动图状态图协作图包图组件图部署图对象图对象图是类图的一个实例,用于显示系统执行时的一个可能的快照,即在某一个时间上系统可能出现的样子,对象图用带下划线的对象名称来表示对象.表现对象的特征 对象图展现了多个对象的特征及对象之间的交互时序图对象:时序图中对象使用矩形表示,并且对象名称下有下划线 将对象置于时序图的顶部说明在交互开始时对象就已经存在了。 如原创 2020-07-25 22:17:43 · 7753 阅读 · 0 评论 -
UML 类图、类与类之间关系
目录类图类的表示法画类图接口的表示法类与类之间关系泛化(Generalization)关系依赖(Dependency)关联(Association)聚合(Aggregation)组合关系类图类图是面向对象系统建模中最常用的图。是定义其他图的基础. 类图主要是用来显示系统中的类,接口以及它们之间的关系. 类图包含的主要元素有类,接口和关系。 其中关系有泛化关系,关联关系,依赖关系和实现关系。 在类图中也可以包含注释和约束. 类的表示法类是类..原创 2020-07-25 18:00:34 · 1175 阅读 · 0 评论 -
UML 用例图
目录用例图使用UML画用例图用例关系泛化关系包含关系扩展关系用例图用例图(Use Case Diagram):也称为用户模型图,是从软件需求分析到最终实现的第一步,它是从客户的角度来描述系统功能 用例图包含3个基本组件:参与者(Actor),用例(Use Case),关系: 参与者(Actor):与系统打交道的人或其他系统即使用该系统的人或事物。在UML中参与者用人形图标表示 用例(Use Case):代表系统的某项完整的功能。在UML中使用一个椭圆来表示 关系:定义原创 2020-07-25 16:45:59 · 427 阅读 · 0 评论 -
StarUML入门教程
声明:原文链接 StarUML使用简明教程 (作者:栾小邑)StarUML入门教程StarUML(简称SU),是一种创建UML类图,生成类图和其他类型的统一建模语言(UML)图表的工具。StarUML是一个开源项目之一发展快、灵活、可扩展性强(zj). StarUML官方下载地址:http://staruml.io/downloadStarUML主界面创建工程在启动star UML时,系统会默认帮我们创建一个工程 如果这个工程不是你想要的工程,你可以点击File ->...转载 2020-06-20 16:20:39 · 3073 阅读 · 0 评论