ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【 C语言 】 C语言设计模式 [打印本页]

作者: 麻花痒    时间: 2024-7-25 09:31
标题: 【 C语言 】 C语言设计模式
一 、C语言和设计模式(继续、封装、多态)
C++有三个最紧张的特点,即继续、封装、多态。我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于怎样实现面向对象语言的三个紧张属性。
(1)继续性
[cpp] view plaincopy
(2)封装性
[cpp] view plaincopy
(3)多态
[cpp] view plaincopy
二、C语言和设计模式(访问者模式)
不知不觉当中,我们就到了最后一种设计模式,即访问者模式。访问者模式,听上去复杂一些。但是,这种模式用简单的一句话说,就是差别的人对差别的事物有差别的感觉。好比说吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐。可是,差别的地方的人未必都喜欢这两种豆腐。四川的朋友大概更喜欢辣豆腐,江浙的人就大概对臭豆腐更喜欢一些。那么,这种情况应该怎么用设计模式表达呢?
[cpp] view plaincopy
三、C语言和设计模式(状态模式)
状态模式是协议交互中使用得比较多的模式。好比说,在差别的协议中,都会存在启动、保持、中止等根本状态。那么怎么机动地转变这些状态就是我们必要思量的事变。假设现在有一个state,
[cpp] view plaincopy
四、 C语言和设计模式(下令模式)
下令模式的目标重要是为了把下令者和实验者分开。老规矩,举个范例吧。假设李老板是一家公司的头儿,他现在让他的秘书王小姐去送一封信。王小姐当然不会自己亲身把信送到目标地,她会把信交给邮局来完成整个投递的全过程。现在,我们就对投递者、下令、发令者分别作出界说。
  1. 首先定义post的相关数据。
复制代码
[cpp] view plaincopy
五、C语言和设计模式(解释器模式)
解释器模式虽然听上去有些费解,但是如果用示例说明一下就不难理解了。我们知道在C语言中,关于变量的界说是这样的:一个不以数字开始的由字母、数字和下划线构成的字符串。这种形式的表达式可以用状态主动机办理,当然也可以用解释器的方式办理。
[cpp] view plaincopy
[cpp] view plaincopy
六、C语言和设计模式(备忘录模式)
备忘录模式的起源来自于取消的根本操作。有过word软件操作履历的朋友,应该根本上都使用过取消的功能。举个例子,假设你不鉴戒删除了好几个段落的文字,这时候你应该怎么办呢?其实要做的很简单,单击一些【取消】就可以全部搞定了。取消按钮给我们提供了一次反悔的机会。
  1. 既然是撤销,那么我们在进行某种动作的时候,就应该创建一个相应的撤销操作?这个撤销操作的相关定义可以是这样的。
复制代码
[cpp] view plaincopy
七、C语言和设计模式(观察者模式)
观察者模式大概是我们在软件开发中使用得比较多的一种设计模式。为什么这么说?各人可以听我一一到来。我们知道,在windows的软件中,全部的界都是由窗口构成的。对话框是窗口,菜单是窗口,工具栏也是窗口。那么这些窗口,在许多情况下要对一些共有的信息举行处理惩罚。好比说,窗口的放大,窗口的减小等等。面临这一情况,观察者模式就是不错的一个选择。
起首,我们可以对这些共有的object举行提炼。
[cpp] view plaincopy
八、C语言和设计模式(桥接模式)
在以往的软件开发过程中,我们总是强调模块之间要低耦合,模块自己要高内聚。那么,可以通过哪些设计模式来实现呢?桥接模式就是不错的一个选择。我们知道,在现实的软件开发过程当中,用户的要求是多种多样的。好比说,有这么一个饺子店吧。假设饺子店原来只卖肉馅的饺子,可是后来一些吃素的顾客说能不能做一些素的饺子。听到这些要求的老板天然不敢怠慢,以是也开始卖素饺子。之后,又有顾客提出,现在的肉馅饺子只有猪肉的,能不能做点牛肉、羊肉馅的饺子?一些只吃素的顾客也故意见了,他们发起能不能增长一些素馅饺子的品种,什么白菜馅的、韭菜馅的,都可以做一点。由此看来,顾客的要求是一层一层递增的。关键是我们怎样把顾客的要求和我们的实现的接口举行有效地分离呢?
其实我们可以这么做,通常的产品还是按照共同的属性举行归类。
[cpp] view plaincopy
九、C语言和设计模式(建造者模式)
如果说前面的工厂模式是对接口举行抽象化处理惩罚,那么建造者模式更像是对流程自己的一种抽象化处理惩罚。这话怎么理解呢?各人可以听我慢慢到来。以前买电脑的时候,各人都喜欢自己组装呆板。一方面可以满意自己的个性化需求,另外一方面也可以在代价上得到许多实惠。但是电脑是由许多部分构成的,每个厂家都只负责其中的一部分,而且相同的组件也有许多的品牌可以从中选择。这对于我们消费者来说当然非常有利,那么应该怎么设计呢?
[cpp] view plaincopy
十、 C语言和设计模式(中介者模式)
中介者模式,听上去有一点生疏。但是,只要我给朋友们打个比方就明白了。早先自由爱情没有现在那么普遍的时候,男女之间的相识还是必要通过牙婆之间才能相互熟悉。男孩对女方有什么要求,可以通过牙婆向女方提出来;当然,女方有什么要求也可以通过牙婆向男方提出来。以是,中介者模式在我看来,就是牙婆模式。
[cpp] view plaincopy
十一、C语言和设计模式(策略模式)
策略模式就是用统一的方法接口分别对差别类型的数据举行访问。好比说,现在我们想用pc看一部影戏,此时应该怎么做呢?看影戏嘛,当然必要各种播放影戏的方法。rmvb要rmvb格式的方法,avi要avi的方法,mpeg要mpeg的方法。可是毕竟上,我们完全可以不去管是什么文件格式。因为播放器对全部的操作举行了抽象,差别的文件会主动调用相应的访问方法。
[cpp] view plaincopy
十二、C语言和设计模式(适配器模式)
现在的生存当中,我们离不开各种电子工具。什么笔记本电脑、手机、mp4啊,都离不开充电。既然是充电,那么就必要用到充电器。其实从根本上来说,充电器就是一个个平凡的适配器。什么叫适配器呢,就是把220v、50hz的交流电压编程5~12v的直流电压。充电器就干了这么一件事变。
那么,这样的一个充电适配器,我们应该怎么用c++形貌呢?
[cpp] view plaincopy
十三、 C语言和设计模式(装饰模式)
装饰模式是比较好玩,也比较故意义。其实就我个人看来,它和责任链还是蛮像的。只不外一个是比较判断,一个是迭代处理惩罚。装饰模式就是那种迭代处理惩罚的模式,关键在哪呢?我们可以看看数据布局。
[cpp] view plaincopy
十五、 C语言和设计模式(代理模式)
代理模式是一种比较故意思的设计模式。它的根本思路也不复杂。举个例子来说,以前在学校上网的时候,并不是每一台pc都有上网的权限的。好比说,现在有pc1、pc2、pc3,但是只有pc1有上网权限,但是pc2、pc3也想上网,此时应该怎么办呢?
此时,我们必要做的就是在pc1上开启代理软件,同时把pc2、pc3的IE代理指向pc1即可。这个时候,如果pc2大概pc3想上网,那么报文会先指向pc1,然后pc1把Internet传回的报文再发给pc2大概pc3。这样一个代理的过程就完成了整个的上网过程。
在说明完整的过程之后,我们可以思量一下软件应该怎么编写呢?
[cpp] view plaincopy
十六、C语言和设计模式(外观模式)
外观模式是比较简单的模式。它的目标也是为了简单。什么意思呢?举个例子吧。以前,我们逛街的时候吃要到小吃一条街,购物要到购物一条街,看书、看影戏要到文化一条街。那么有没有这样的地方,既可以吃喝玩乐,同时相互又靠得比较近呢。其实,这就是清闲广场,遍布天下的万达广场就是干了这么一件事。
起首,我们原来是怎么做的。
[cpp] view plaincopy
十七、 C语言和设计模式(迭代器模式)
使用过C++的朋友大概对迭代器模式都不会太生疏。这重要是因为我们在编写代码的时候离不开迭代器,队列有迭代器,向量也有迭代器。那么,为什么要迭代器呢?这重要是为了提炼一种通用的数据访问方法。
好比说,现在有一个数据的容器,
[cpp] view plaincopy
十八、 C语言和设计模式(抽象工厂模式)
前面我们写过的工厂模式实际上是对产品的抽象。对于差别的用户需求,我们可以给予差别的产品,而且这些产品的接口都是同等的。而抽象工厂呢?顾名思义,就是说我们的工厂是不一定的。怎么理解呢,举个例子。
假设有两个水果店都在卖水果,都卖苹果和葡萄。其中一个水果店买白苹果和白葡萄,另外一个水果店卖红苹果和红葡萄。以是说,对于水果店而言,只管都在卖水果,但是两个店卖的品种不一样。
既然水果不一样,那我们先界说水果。
[cpp] view plaincopy
十九、 C语言和设计模式(责任链模式)
责任链模式是很实用的一种实际方法。举个例子来说,我们寻常在公司里面不免不了报销流程。但是,我们知道公司里面每一级的领导的报批额度是不一样的。好比说,科长的额度是1000元,部长是10000元,总经理是10万元。
那么这个时候,我们应该怎么设计呢?其实可以这么理解。好比说,有人来找领导报销费用了,那么领导可以自己先看看自己能不能报。如果费用可以顺利报下来当然最好,可是万一报不下来呢?那就只能请示领导的领导了。
[cpp] view plaincopy
[cpp] view plaincopy
二十、 C语言和设计模式(工厂模式)
工厂模式是比较简单,也是比较好用的一种方式。根本上说,工厂模式的目标就根据差别的要求输出差别的产品。好比说吧,有一个生产鞋子的工厂,它能生产皮鞋,也能生产胶鞋。如果用代码设计,应该怎么做呢?
[cpp] view plaincopy
二十一、 C语言和设计模式(之模板模式)
模板对于学习C++的同学,其实并不生疏。函数有模板函数,类也有模板类。那么这个模板模式是个什么情况?我们可以思考一下,模板的本质是什么。好比说,现在我们必要编写一个简单的比较模板函数。
[cpp] view plaincopy
二十二、C语言和设计模式(之组合模式)
组合模式听说去很玄乎,其实也并不复杂。为什么?各人可以先想一下数据布局里面的二叉树是怎么回事。为什么就是这么一个简单的二叉树节点既大概是叶节点,也大概是父节点?
[cpp] view plaincopy
[cpp] view plaincopy
[cpp] view plaincopy
二十三、C语言和设计模式(之原型模式)
原型模式本质上说就是对当前数据举行复制。就像变戏法一样,一个鸽子变成了两个鸽子,两个鸽子变成了三个鸽子,就这么一直变下去。在变的过程中,我们不必要思量具体的数据类型。为什么呢?因为差别的数据有自己的复制类型,而且每个复制函数都是虚函数。
用C++怎么编写呢,那就是先写一个基类,再编写一个子类。就是这么简单。
[cpp] view plaincopy
二十四、C语言和设计模式(之单件模式)
有过面试履历的朋友,大概对设计模式有点熟悉的朋友,都会对单件模式不生疏。对许多面试官而言,单件模式更是他们面试的保留项目。其实,我倒认为,单件模式算不上什么设计模式。最多也就是个技巧。
单件模式要是用C++写,一般这么写。
[cpp] view plaincopy
二十五、C语言和设计模式(之开篇)
关于软件设计方面的书许多,好比《重构》,好比《设计模式》。至于软件开发方式,那就更多了,什么极限编程、精益方法、敏捷方法。随着时间的推移,许多的方法又会被重新提出来。
  1. 其实,就我个人看来,不管什么方法都离不开人。一个人写不出二叉树,你怎么让他写?敏捷吗?你写一行,我写一行。还是迭代?写三行,删掉两行,再写三行。项目的成功是偶然的,但是项目的失败却有很多原因,管理混乱、需求混乱、设计低劣、代码质量差、测试不到位等等。就软件企业而言,没有比优秀的文化和出色的企业人才更重要的了。
  2. 从软件设计层面来说,一般来说主要包括三个方面:
  3. (1)软件的设计受众,是小孩子、老人、女性,还是专业人士等等;
  4. (2)软件的基本设计原则,以人为本、模块分离、层次清晰、简约至上、适用为先、抽象基本业务等等;
  5. (3)软件编写模式,比如装饰模式、责任链、单件模式等等。
  6. 从某种意义上说,设计思想构成了软件的主题。软件原则是我们在开发中的必须遵循的准绳。软件编写模式是开发过程中的重要经验总结。灵活运用设计模式,一方面利于我们编写高质量的代码,另一方面也方便我们对代码进行维护。毕竟对于广大的软件开发者来说,软件的维护时间要比软件编写的时间要多得多。编写过程中,难免要有新的需求,要和别的模块打交道,要对已有的代码进行复用,那么这时候设计模式就派上了用场。我们讨论的主题其实就是设计模式。
  7. 讲到设计模式,人们首先想到的语言就是c#或者是java,最不济也是c++,一般来说没有人会考虑到c语言。其实,我认为设计模式就是一种基本思想,过度美化或者神化其实没有必要。其实阅读过linux kernel的朋友都知道,linux虽然自身支持很多的文件系统,但是linux自身很好地把这些系统的基本操作都抽象出来了,成为了基本的虚拟文件系统。
  8. 举个例子来说,现在让你写一个音乐播放器,但是要支持的文件格式很多,什么ogg,wav,mp3啊,统统要支持。这时候,你会怎么编写呢?如果用C++语言,你可能会这么写。
复制代码
[cpp] view plaincopy
[cpp] view plaincopy

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4