
编程设计模式
文章平均质量分 88
勤学-365
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
桥接模式
文章目录#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>enum Dumpling{Meat,Normal};typedef struct _MeatDumpling{ void (*make)();}MeatDumpli...原创 2020-03-30 19:03:44 · 612 阅读 · 0 评论 -
装饰模式
文章目录1、场景举例2、主要应用场景3、类图4、用C实现装饰模式角色定义案例描述案例实现5、用C++实现装饰模式角色定义案例描述案例实现6、注意事项7、实现要点8、与桥接模式的区别1、场景举例生产汽车2、主要应用场景1、想要不影响对象的前提下,以动态的、透明的方式给对象添加职责2、某些职责相做成动态的,可以撤销的3、当扩展类较多时,不想类爆炸(如果一味使用继承方式,当扩展类很多,会出现...原创 2020-03-29 21:10:32 · 567 阅读 · 0 评论 -
代理模式
文章目录#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct PC_CLIENT{ void (*request)();}Pc_Client;typedef struct PROXY{ Pc_Client *pc_client;}Proxy;...原创 2020-03-27 22:08:03 · 565 阅读 · 0 评论 -
适配器模式
文章目录#include <stdio.h>#include <stdlib.h>typedef struct ADAPTEE{ void (*request)(void);}Adaptee;typedef struct ADAPTER{ struct ADAPTEE *adaptee; void (*request)(struct A...原创 2020-03-23 21:59:10 · 673 阅读 · 0 评论 -
外观模式\门面模式
文章目录1、场景举例2、主要应用场景3、类图4、用C语言实现外观模式角色定义案例描述案例实现5、使用C++实现门面模式角色定义案例描述案例实现6、优点7、总结1、场景举例vs编译器,仅看到了build,但是实际上完成了编译链接等复杂操作2、主要应用场景想要为一个复杂子系统提供一个简单接口3、类图4、用C语言实现外观模式角色定义实现一个组合步骤的门面函数案例描述使用门面模式,...原创 2020-03-22 16:06:50 · 513 阅读 · 0 评论 -
单例模式
文章目录1、场景举例2、主要应用场景3、类图4、用C语言实现原型模式角色定义案例描述案例实现5、使用C++实现单例模式角色定义案例描述函数实现6、缺点1、场景举例日志系统2、主要应用场景1、解决重复操作引起的大量new delete问题2、代替全局变量3、类图4、用C语言实现原型模式角色定义1、实现一个返回静态地址的内存申请函数案例描述使用单例模式实现申请具体结构内存,下...原创 2020-03-22 13:56:44 · 430 阅读 · 0 评论 -
原型模式
文章目录1、场景举例2、主要应用场景3、类图4、用C语言实现原型模式角色定义案例描述案例实现5、用C++实现原型模式角色定义案例描述案例实现6、缺点7、各个创建模式比较1、场景举例很多时候,在程序运行过程共,我们需要动态的复制一份已经被赋值的对象,这个时候原型模式就可以发挥作用了2、主要应用场景1、需要在运行过程中,动态的拷贝一份对象2、需要某个对象在某个状态下的副本3、处理一些简单...原创 2020-03-13 22:19:50 · 249 阅读 · 0 评论 -
建造者模式
文章目录1、场景举例2、主要应用场景3、类图4、用C语言实现创建者模式角色定义案例描述案例实现5、用C++实现简单工厂模式角色定义案例描述案例实现6、缺点1、场景举例之间提到的那个买鞋店,使用简单工厂模式、工厂方法模式、抽象工厂模式可以很完美的解决问题。但是如果细心的话,可以发现,工厂类模式比较适合那些存在相关性的场景。对象的元素之间往往存在一定的联系,最后生成单一对象。但是如果此时把买鞋店...原创 2020-03-13 09:41:34 · 433 阅读 · 0 评论 -
抽象工厂模式
文章目录可以解决那类问题主要应用场景用C语言实现抽象工厂模式实现步骤案例描述案例实现使用C++实现抽象工厂模式可以解决那类问题针对大部分对象生产场景,使用工厂方法模式即可以搞定。但是:1、如果解决某个问题需要用到的工厂种类非常多,那么程序逻辑里就需要维护很多的工厂,增加程序熵值,后期维护难度会很高。2、很多时候多个对象之间是存在依赖关系的,这样的两个对象如果用两个工厂去维护,会增加很多不必...原创 2020-03-01 00:24:39 · 303 阅读 · 0 评论 -
工厂方法模式
文章目录1、可以解决那类问题2、主要应用场景3、用C语言实现工厂方法模式实现步骤1、可以解决那类问题之前提到过了简单工厂模式,它一方面将对象的创建和使用完全分离,但同时自身存在三个比较大的问题:1、针对于产品本身的扩展性很差:如果我给产品新增某个元素,那么所有的产线代码都需要做出调整。扩展性很差2、如果新增一个同类型产品,那么需要改动工厂代码,之前针对工厂代码的测试全部要重新进行。扩展性很...原创 2020-02-29 09:25:26 · 410 阅读 · 0 评论 -
简单工厂模式
文章目录可以解决那类问题主要应用场景用C语言实现简单工厂模式实现步骤案例描述案例实现用C++实现简单工厂模式类图实现步骤案例描述案例实现可以解决那类问题就比如ceph中以osd作为一个对象,如果每次用到这个对象的时候都去临时创建一个,创建必然伴随着malloc|new等操作,然后又得是一段异常处理函数,这样下来整个代码都会显得异常臃肿。其实来说,使用对象的一方其实根本不在乎对象是如何创建的,如...原创 2020-02-16 15:58:49 · 634 阅读 · 0 评论 -
编程--编码设计模式总结
文章目录前言为什么编码时一定要考虑编码模式编码模式分类前言关于编码设计模式,之前从各方渠道搜集了很多很容,今天在这里做一个统一整理归纳。用自己的语言描述目前对于编码模式的理解。每一门知识要真正深究起来,都会有一定深度,要真正理解编码模式,不光要对其理论有整体掌握,还要经过大量的输出才能将知识内化,目前对这部分的理解并没有到达精通水平,本次是对已有知识的进一步深入整理,当遇到一些场景时,能够立刻...原创 2020-02-13 18:43:23 · 957 阅读 · 0 评论 -
好的设计模式应该遵守的原则
文章目录单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则单一职责原则要求在软件系统中,一个类只负责一个功能领域中的相应职责开闭原则要求一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展一个系统的行为里氏代换原则可以通俗表述为在软件中如果能够使用基类对象,那么一定能够使用其子类对象依赖倒转原则要求抽象不应该依赖于细节,细节应该依赖于抽象...原创 2020-01-26 16:09:36 · 431 阅读 · 0 评论 -
面向对象思想
文章目录一、面向过程的思想和面向对象的思想二、简单理解面向对象三、面向对象思想概念四、对象和类的概念五、抽象出一个类的方法六、类(对象)之间的关系1、关联关系2、继承关系3、聚合关系一、面向过程的思想和面向对象的思想面向过程思维:拿到一个问题时,第一步先做什么,第二步再做什么面向对象思维:1、分析这个问题里面有哪些对象2、分析这些类和对象应该具有哪些属性和方法3、分析类和类之间具体有什...原创 2020-01-27 09:51:52 · 339 阅读 · 0 评论 -
设计模式分类(创建型模式、结构型模式、行为型模式)
文章目录1、创建型模式2、结构型模式3、行为型模式1、创建型模式 前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题2、结构型模式 在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点...原创 2020-01-27 09:51:58 · 458 阅读 · 0 评论 -
C语言和设计模式(之单件模式)
一句话理解变量的使用和释放不影响其他函数。1、变量内存的申请和释放、封装在函数内进行2、变量的变量引用完全函数内部解决极大程度的减少了代码的耦合性举例 有过面试经验的朋友,或者对设计模式有点熟悉的朋友,都会对单件模式不陌生。对很多面试官而言,单件模式更是他们面试的保留项目。其实,我倒认为,单件模式算不上什么设计模式。最多也就是个技巧 单件模式要是用C++写,一般这么写#includ...原创 2020-01-27 09:51:41 · 217 阅读 · 0 评论 -
C语言和设计模式(之原型模式)
文章目录一句话理解举例一句话理解当在程序运行过程中,需要动态复制一份数据(结构或其他),保证其数据与源完全一致。这个时候原型模式可以很大程度上解决问题举例 原型模式本质上说就是对当前数据进行复制。就像变戏法一样,一个鸽子变成了两个鸽子,两个鸽子变成了三个鸽子,就这么一直变下去。在变的过程中,我们不需要考虑具体的数据类型。为什么呢?因为不同的数据有自己的复制类型,而且每个复制函数都是虚函数...原创 2020-01-27 09:52:13 · 324 阅读 · 0 评论 -
C语言和设计模式(组合模式)
文章目录一句话理解举例一句话理解针对一个结构,其中包含 1、指向孩子的指针 2、数据 3、操作函数指针。可以将这些结构串联起来、其中的操作函数可以不同,数据可以不同。这样就能整理出一个树形的编码模式。并可以不断扩展举例 组合模式听说去很玄乎,其实也并不复杂。为什么?大家可以先想一下数据结构里面的二叉树是怎么回事。为什么就是这么一个简单的二叉树节点既可能是叶节点,也可能是父节点?typed...原创 2020-01-26 16:03:15 · 852 阅读 · 0 评论 -
C语言和设计模式(模板模式)
文章目录一句话总结举例一句话总结当执行某个流程时,各个子流程如果有多种实现方式,可以编写一个模板函数放在主流程里,具体实现可以随时替换举例 模板对于学习C++的同学,其实并不陌生。函数有模板函数,类也有模板类。那么这个模板模式是个什么情况?我们可以思考一下,模板的本质是什么。比如说,现在我们需要编写一个简单的比较模板函数template <typename type>in...原创 2020-01-27 09:52:51 · 403 阅读 · 0 评论 -
C语言和设计模式(责任链模式)
文章目录一句话总结举例一句话总结客户指定责任链,对象丢给责任链后,由符合要求的责任者处理。针对于处理大量指定对象,需要不同的特性的责任者的场景非常合适举例 责任链模式是很实用的一种实际方法。举个例子来说,我们平常在公司里面难免不了报销流程。但是,我们知道公司里面每一级的领导的报批额度是不一样的。比如说,科长的额度是1000元,部长是10000元,总经理是10万元 那么这个时候,我们应该怎...原创 2020-01-27 09:52:50 · 196 阅读 · 0 评论 -
C语言和设计模式(抽象工厂模式)
文章目录一句话理解举例一句话理解工厂方法模式适用于产品种类结构单一的场合,为一类产品提供创建的接口;抽象工厂方法适用于产品种类结构多的场合,主要用于创建一组(有多个种类)相关的产品,为它们提供创建的接口举例 前面我们写过的工厂模式实际上是对产品的抽象。对于不同的用户需求,我们可以给予不同的产品,而且这些产品的接口都是一致的。而抽象工厂呢?顾名思义,就是说我们的工厂是不一定的。怎么理解呢,...原创 2020-01-27 09:53:02 · 237 阅读 · 0 评论 -
C语言和设计模式(工厂方法模式)
文章目录一句话理解例子一句话理解工厂中每个产品自己实现自己的创建函数,工厂只提供函数指针(虚函数)优点:将工厂和每个产品之间的耦合解决掉,每次增加产品,不需要修改工厂内部代码例子#include <iostream>using namespace std;class Product{public: virtual void Show() = 0;};c...原创 2020-01-27 09:53:04 · 454 阅读 · 0 评论 -
C语言和设计模式(简单工厂模式)
文章目录一句话理解举例一句话理解一个工厂,根据输入类型不一样,产生不同类型的结果,factory中使用switch 或者if else来做区分。缺点:每次增加一个新产品,需要对factor进行修改,之前对factory的测试要重新进行优点:针对小型程序,设计比较简单、代码耦合度低举例#include <iostream>#include <vector>us...原创 2020-01-27 09:54:03 · 468 阅读 · 0 评论 -
C语言和设计模式(迭代器模式)
文章目录一句话理解举例一句话理解遍历一组数据结构或对象事物,不需要知道内部具体实现的方法举例 使用过C++的朋友大概对迭代器模式都不会太陌生。这主要是因为我们在编写代码的时候离不开迭代器,队列有迭代器,向量也有迭代器。那么,为什么要迭代器呢?这主要是为了提炼一种通用的数据访问方法。 比如说,现在有一个数据的容器,typedef struct _Container{ int* ...原创 2020-01-26 15:54:39 · 419 阅读 · 0 评论 -
C语言和设计模式(外观模式)
文章目录一句话总结举例一句话总结我们在使用visual studio进行编译C++代码时,你只是在菜单中选择了Build,然后visual studio就开始了一堆的编译工作。外观模式就是把要做的很多事情分离开来、最后组合成一件事情。举例 外观模式是比较简单的模式。它的目的也是为了简单。什么意思呢?举个例子吧。以前,我们逛街的时候吃要到小吃一条街,购物要到购物一条街,看书、看电影要到文化一...原创 2020-01-27 09:54:10 · 235 阅读 · 0 评论 -
C语言和设计模式(代理模式)
文章目录一句话理解举例一句话理解为其他对象提供一种代理以控制对这个对象的访问现在有了游戏代理,你是这样玩游戏:举例 代理模式是一种比较有意思的设计模式。它的基本思路也不复杂。举个例子来说,以前在学校上网的时候,并不是每一台pc都有上网的权限的。比如说,现在有pc1、pc2、pc3,但是只有pc1有上网权限,但是pc2、pc3也想上网,此时应该怎么办呢? 此时,我们需要做的就是在pc...原创 2020-01-27 09:54:16 · 550 阅读 · 0 评论 -
C语言和设计模式(享元模式)
文章目录一句话理解一句话理解当并发做一件任务时,存在大量相似对象。这个时候如果该对象已经申请,就不必再去申请一个新的。针对大量相似对象场景,可以避免大量开销...原创 2020-01-27 09:54:23 · 213 阅读 · 0 评论 -
C语言和设计模式(装饰模式)
文章目录一句话理解举例一句话理解不修改核心功能、仅在核心功能外侧,添加辅助功能(shell就是一个例子)。这样能保证核心功能稳定,根据具体需求,对核心功能做一些修饰举例 装饰模式是比较好玩,也比较有意义。其实就我个人看来,它和责任链还是蛮像的。只不过一个是比较判断,一个是迭代处理。装饰模式就是那种迭代处理的模式,关键在哪呢?我们可以看看数据结构。typedef struct _Obje...原创 2020-01-26 16:02:46 · 446 阅读 · 0 评论 -
C语言和设计模式(适配器模式)
文章目录一句话理解举例一句话理解 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。好比日本现在就只提供110V的电压,而我的电脑就需要220V的电压,那怎么办啦?适配器就是干这活的,在不兼容的东西之间搭建一座桥梁,让二者能很好的兼容在一起工作。举例 现在的生活当中,我们离不开各种电子工具。什么笔记本电脑、手机、mp4啊,都离不...原创 2020-01-26 16:05:09 · 605 阅读 · 0 评论 -
C语言和设计模式(策略模式)
文章目录一句话理解举例一句话理解 策略模式和状态模式,是大同小异的;状态模式讲究的是状态的变化,和不同状态下,执行的不同行为;而策略模式侧重于同一个动作,实现该行为的算法的不同,不同的策略封装了不同的算法。策略模式适用于实现某一功能,而实现该功能的算法是经常改变的情况。在实际工作中,遇到了实际的场景,可能会有更深的体会举例 策略模式就是用统一的方法接口分别对不同类型的数据进行访问。比如说,...原创 2020-01-26 16:13:34 · 698 阅读 · 0 评论 -
C语言和设计模式(建造者模式)
文章目录一句话理解举例一句话理解将一个人拆分为:手、脚、头、眼睛、鼻子、嘴,,,各个模块实现自己功能,最终组合为一个人举例 以前买电脑的时候,大家都喜欢自己组装机器。一方面可以满足自己的个性化需求,另外一方面也可以在价格上得到很多实惠。但是电脑是由很多部分组成的,每个厂家都只负责其中的一部分,而且相同的组件也有很多的品牌可以从中选择。这对于我们消费者来说当然非常有利,那么应该怎么设计呢?...原创 2020-01-27 09:54:32 · 272 阅读 · 0 评论 -
代码编写流程
第一步:整理思路、画出思维导图(可以手绘)第二步:找到其中的关键对象、设计结构体第三步:设计好要使用的数据结构(出、入、排序、判空、销毁)第四步:考虑时间空间复杂度,准备好核心算法第五步:编写代码、考虑代码扇入扇出。第六步:编写测试用例、完成代码测试...原创 2020-01-27 09:52:05 · 30414 阅读 · 1 评论 -
C语言和设计模式(桥接模式)
文章目录一句话理解举例一句话理解 桥接模式使得抽象和实现进行了分离,抽象不用依赖于实现,让抽象和实现部分各自修改起来都很方便,使用组合(就是Abstraction类中包含了Implementor)的方式,降低了耦合度,同时也有助于分层,从而产生更好的结构化系统。通过实际的项目经验,使用了桥接模式的代码,对以后的扩展有很大的帮助举例 在以往的软件开发过程中,我们总是强调模块之间要低耦合,模块...原创 2020-01-26 15:55:06 · 651 阅读 · 0 评论 -
C语言和设计模式(观察者模式)
文章目录一句话理解举例一句话理解抽象出众多对象共同的属性,该属性变化后,其他属性全部跟着改变,而不需要针对每个对象依次修改举例 观察者模式可能是我们在软件开发中使用得比较多的一种设计模式。为什么这么说?大家可以听我一一到来。我们知道,在windows的软件中,所有的界都是由窗口构成的。对话框是窗口,菜单是窗口,工具栏也是窗口。那么这些窗口,在很多情况下要对一些共有的信息进行处理。比如说,窗...原创 2020-01-26 16:13:47 · 432 阅读 · 0 评论 -
C语言和设计模式(备忘录模式)
文章目录一句话理解举例一句话理解代码设计在修改之后支持回退(撤销、恢复)举例 备忘录模式的起源来自于撤销的基本操作。有过word软件操作经验的朋友,应该基本上都使用过撤销的功能。举个例子,假设你不小心删除了好几个段落的文字,这时候你应该怎么办呢?其实要做的很简单,单击一些【撤销】就可以全部搞定了。撤销按钮给我们提供了一次反悔的机会。既然是撤销,那么我们在进行某种动作的时候,就应该创建一...原创 2020-01-27 09:55:42 · 370 阅读 · 0 评论 -
C语言和设计模式(解释器模式)
文章目录一句话理解举例实际例子一句话理解设计函数,对指定输入进行解释,将输入解释为期望的输出结果。(正则表达式就是解释器的代表)举例 就如上面说的那个游戏,我输入up walk 5,我必须按照:移动方向+移动方式+移动距离这种格式输入我的指令,而这种格式的指令就是一种文法,只有按照了我定义的这种文法去输入,才能控制屏幕上的小狗去移动。当然了,我输入up walk 5,屏幕上的小狗肯定是听不...原创 2020-01-27 09:56:01 · 337 阅读 · 0 评论 -
C语言和设计模式(命令模式)
文章目录 命令模式的目的主要是为了把命令者和执行者分开。老规矩,举个范例吧。假设李老板是一家公司的头儿,他现在让他的秘书王小姐去送一封信。王小姐当然不会自己亲自把信送到目的地,她会把信交给邮局来完成整个投递的全过程。现在,我们就对投递者、命令、发令者分别作出定义。首先定义post的相关数据。typedef struct _Post{ void (*do)(struct _Post...原创 2020-01-26 16:02:32 · 290 阅读 · 0 评论 -
C语言和设计模式(状态模式)
文章目录举例总结举例 状态模式是协议交互中使用得比较多的模式。比如说,在不同的协议中,都会存在启动、保持、中止等基本状态。那么怎么灵活地转变这些状态就是我们需要考虑的事情。假设现在有一个statetypedef struct _State{ void (*process)(); struct _State* (*change_state)(); }State; ...原创 2020-01-26 15:58:23 · 494 阅读 · 0 评论 -
C语言和设计模式(继承、封装、多态)
文章目录前言继承性封装性多态前言 记得还在我们大学C++第一门课的时候,老师就告诉我们说,C++是一门面向对象的语言。C++有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验的积累,我也慢慢明白了面向对象的含义。可是,等我工作以后,使用的编程语言更多的是C语言,这时候我又想能不能把C语言变成面向对象的语言呢?等到后来通过思考和实践,我发现其实C语言也是可以面向对象的,也...原创 2020-01-27 09:55:57 · 369 阅读 · 0 评论 -
C语言和设计模式(访问者模式)
文章目录前提例子总结前提不知不觉当中,我们就到了最后一种设计模式,即访问者模式。访问者模式,听上去复杂一些。但是,这种模式用简单的一句话说,就是不同的人对不同的事物有不同的感觉。比如说吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐。可是,不同的地方的人未必都喜欢这两种豆腐。四川的朋友可能更喜欢辣豆腐,江浙的人就可能对臭豆腐更喜欢一些。那么,这种情况应该怎么用设计模式表达呢?例子typedef ...原创 2020-01-27 09:55:53 · 341 阅读 · 0 评论