怎样去平衡C++项目盈亏平衡点的设计

10624人阅读
设计模式(24)
设计模式总结:
前言:个人觉得设计模式就是各个对象在不同的时机、不同的调用方被创建,组合结构和封装的侧重点有些不同,从而形成了各个模式的概念。
1.&&&&&&简单工厂模式
通过在工厂类中进行判断,然后创建需要的功能类。
优点:不必使用具体的功能类去创建该类的实例。缺点:新增一个功能类就需要在工厂类中增加一个判断。
2.&&&&&&策略模式
假设一个功能类是一个策略,调用的时候需要创建这个策略的实例,传进一个类似策略控制中心的方法中,然后通过策略基类调用这个传进去的实例子类的方法。
优点:就是相对工厂模式免去了创建那个功能类的判断,简化了工厂模式。缺点:就是把子类实例赋值给了父类,这样就丢掉了子类新增的功能。
3.&&&&&&工厂方法模式(属于工厂模式)
把简单工厂模式中的工厂类,做了进一步的抽象为接口或抽象类,给各个功能创建一个对应的工厂类,然后在这个工厂类里面去创建对应的实例。
缺点:当新增一个功能类,就需要创建对于的工厂类,相比简单工厂模式,免去了判断创建那个具体实例,但会创建过多的类,还不如策略模式。
4.&&&&&&装饰模式
&&一般情况下,当一个基类写好之后,我们也许不愿意去改动,也不能改动,原因是
&& 这样的在项目中用得比较久的基类,一旦改动,也许会影响其他功能模块,但是,
&& 又要在该类上面添加功能。使用继承,当在A阶段,写出继承类,用过一段时间,发
&&& 现又要添加新功能,于是又要从原始类或A阶段的类继承,周而复始,慢慢的,子类就越来越多,层级就越来越深。然而,事实上,在C阶段需要A阶段的功能,但不需要B阶段的功能,在这种复杂情形下,继承就显得不灵活,于是想到了装饰模式。
&&&& 装饰模式:
&&&& 需要扩展一个类的功能,或给一个类增加附加责任
&&&& 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
&&&& 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
&&&& 在使用装饰模式前,需要了解虚方法和抽象方法的区别:虚方法,是实例方法,可以在子类中覆盖,也可以由该类对象直接调用。抽象方法需要写在抽象类中,抽象类不能实例化,所以要使用抽象方法必须由子类实现后方可调用。
&&&& 该模式中,要被扩展的类可以是包含抽象方法的抽象类,也可以是包含虚方法的实例类,也可以是普通实例类。装饰模式就是在原有基类上做扩展,至于基类是什么性质并不重要.
装饰模式在C#代码,和扩展方法,惊人的类似。
5.& 代理模式
&代理类成为实际想调用对象的中间件,可以控制对实际调用对象的访问权限;维护实际调用对象的一个引用。
6.& 原型模式
创建好了一个实例,然后用这个实例,通过克隆方式创建另一个同类型的实例,而不必关心这个新实例是如何创建的。
原型模式使用时需要注意浅拷贝与深拷贝的问题。
7.& 建造者模式
每个对象都具备自己的功能,但是,它们的创建方式却是一样的。这个时候就需要中间这个建造者类来负责功能对象实例的创建。在调用端只需调用特定的方法即可。
这个和策略模式有点类似。
8.&&&&&&抽象工厂模式
使用该功能类的功能类,利用抽象工厂去创建该功能类的实例。这样的好处在于尽可能的避免去创建功能的实例。
更牛逼的做法就是使用反射去创建这个功能类的实例,在调用端就一点都不需要知道要去实例化那个具体的功能类。这当然不是抽象工厂模式独有的。
9.&&&&&&外观模式
外观模式:为外界调用提供一个统一的接口,把其他类中需要用到的方法提取出来,由外观类进行调用。然后在调用段实例化外观类,以间接调用需要的方法。这种方式形式上和代理模式有异曲同工之妙。
10.模板模式
模板模式:其实就是抽象出各个具体操作类的公共操作方法,在子类重新实现,然后使用子类去实例化父类。这个模板类其实可以使用接口替换。事实上接口才是专门用来定义操作规范。当然,当有些公共方法,各个子类均有一致需求,此时就不应使用接口,使用抽象类。
11.& 状态模式
一个方法的判断逻辑太长,就不容易修改。方法过长,其本质就是,就是本类在不同条件下的状态转移。状态模式,就是将这些判断分开到各个能表示当前状态的独立类中。
12.& 备忘录模式
备忘录模式:事实上我觉得这个东西没什么用,安照这种方式进行备份,会因为值类型与引用类型的不同而导致数据丢失。
13.& 适配器模式
适配器模式:其实就是代理模式的一个变种,代码的编写方式都差不多。只是,使用这两种模式的出发点不一样,导致这两种模式产生了细微的差别。
14.& &组合模式
当对象或系统之间出现部分与整体,或类似树状结构的情况时,考虑组合模式。相对装饰模式来说,这两个有异曲同工之妙,都强调对象间的组合,但是,装饰模式同时强调组合的顺序,而组合模式则是随意组合与移除。
15.& 单例模式
能避免同一对象被反复实例化。比如说,访问数据库的连接对象就比普通对象实例化的时间要长;WCF中,维护服务器端远程对象的创建等,这类情况,很有必要用单例模式进行处理对象的实例化。
16.& 迭代器模式
提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
Foreach就是这种模式应用的代表。
17.& 职责链模式
职责链模式:就是一个将请求或命令进行转发的流程,类似工作流。并且,也非常类似状态模式,它们共同的特点就是将一个复杂的判断逻辑,转移到各个子类,然后在由子类进行简单判断。
状态模式与职责链模式的区别:状态模式是让各个状态对象自己知道其下一个处理的对象是谁,即在编译时便设定好了的;而职责链模式中的各个对象并不指定其下一个处理的对象到底是谁,只有在客户端才设定。
18.& &命令模式
当有客户端发送了一系列的命令或请求,去要求某个对象实现什么操作,可使用命令模式,相当于多个命令发给一个对象。
这一点和观察者模式非常的类似。观察者模式也是某个对象,发出消息,然后由中间对象通知观察者然后去做什么,封装的是要执行操作的对象。而命令模式,则是将各个操作封装成类,然后告知某个对象该做什么。两者的区别是封装的角度不同。
19.& &桥接模式
依据合成/聚合原则,优先使用类之间的不同组合,来实现各个类要表现的功能,而不是使用继承。比如说:继承会延续父类的功能,然而,并不是所有的子类都需要这样的功能,但是抽象出的东西在父类,导致子类又必须要实现它,这样,父类就越来越庞大,子类又多了很多不必要的东西。因此,桥接模式更强调类之间的组合从而实现解耦。
对比组合模式,它更强调的是部分与整体间的组合,桥接模式强调的是平行级别上不同类的组合。
举例:写好了C#代码,VB代码,此时需要个编译器来编译。这时,这个编译器就相当于解释器,解释好了交给CPU执行。
解释器跟适配器模式有点类似,但是,适配器模式不需要预先知道要适配的规则,解释器是根据规则去执行解释。
21.&&享元模式
享元模式其实是为了避免创建过多的数据对象。比如此列:在象棋中只有红黑双方,红棋子只是红棋中的一颗,很多红棋其实可以使用一个红棋对象表示即可,在外部只需公开该棋的状态即可区分那个红棋,从而达到减少内存消耗的目的。
22.中介者模式
中介者模式:中介者类唯一要干的事情就是给各个成员对象发出通知。因此,中介者事先就应该知道有哪些成员。
中介者模式和代理模式,观察者模式非常的像。但是其它两种模式在调用的时候,并不需要事先设置那个类被代理,或是事先那些对象需要被通知。
23.&访问者模式
在不改变原有代码的结构上,又想去影响原来的类,或是访问原来类的成员,此时就可以使用访问者模式。但需要注意的是:事先需要构造好那些要访问的对象的对象结构。这个结构在访问者类中去维护。
24.&观察者模式
就是消息订阅--发布模式。本来原始的状况是需要在观察者类内部设置需要通知的对象。结果现在出现了事件。定义委托来通知其他对象,显得更简洁。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:184326次
积分:2852
积分:2852
排名:第10099名
原创:111篇
(1)(2)(1)(1)(1)(3)(11)(39)(3)(5)(11)(20)(19)中国领先的IT技术网站
51CTO旗下网站
如何熟悉一个开源项目?
你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西。怎么下手呢?如何开始呢?我的习惯是这样:
作者:佚名来源:WEB开发者| 10:00
你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西。怎么下手呢?如何开始呢?我的习惯是这样:
1. 首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。
2. 阅读项目的文档,重点关注类似Getting started、Example之类的文档,从中学习如何下载、安装、甚至基本使用该项目所需要的知识。
3. 如果该项目有提供现成的example工程,首先尝试按照开始文档的介绍运行example,如果运行顺利,那么恭喜你顺利开了个好头;如果遇到问题,首 先尝试在项目的FAQ等文档里查找答案,再次,可以将问题(例如异常信息)当成关键词去搜索,查找相关的解决办法,你遇到了,别人一般也会遇到,热心的朋 友会记录下解决的过程;最后,可以将问题提交到项目的邮件列表,请大家帮你看看。在没有成功运行example之前,不要尝试修改example。
4. 运行了第一个example之后,尝试根据你的理解和需要修改example,测试高级功能等。
5. 在了解基本使用后,需要开始深入的了解该项目。例如项目的配置管理、高级功能以及最佳实践。通常一个运作良好的项目会提供一份从浅到深的用户指南,你并不 需要从头到尾阅读这份指南,根据时间和兴趣,特别是你自己任务的需要,重点阅读部分章节并做笔记(推荐evernote)。
6. 如果时间允许,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。尝试构建一个版本。
7. 如果时间允许并且有兴趣,可以尝试阅读源码:
(1)阅读源码之前,查看该项目是否提供架构和设计文档,阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。
(2)阅读源码之前,一定要能构建并运行该项目,有个直观感受。
(3)阅读源码的第一步是抓主干,尝试理清一次正常运行的代码调用路径,这可以通过debug来观察运行时的变量和行为。修改源码加入日志和打印可以帮助你更好的理解源码。
(4)适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。
(5)挑选感兴趣的&枝干&代码来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,debug细节代码。
(6)阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。
(7)在熟悉源码后,发现有可以改进的地方,有精力、有意愿可以向该项目的开发者提出改进的意见或者issue,甚至帮他修复和实现,参与该项目的发展。
8. 通常在阅读文档和源码之后,你能对该项目有比较深入的了解了,但是该项目所在领域,你可能还想搜索相关的项目和资料,看看有没有其他的更好的项目或者解决方案。在广度和深度之间权衡。
以上是我个人的一些习惯,我自己也并没有完全按照这个来,但是按照这个顺序,基本上能让你比较高效地学习和使用某个开源项目。
&【责任编辑: TEL:(010)】
大家都在看猜你喜欢
原创外电外电头条专题
24H热文一周话题本月最赞
讲师:1人学习过
讲师:27人学习过
讲师:0人学习过
精选博文论坛热帖下载排行
Linux出色的网络功能堪称当今操作系统中的佼佼者,无论在功能还是在支持能力上都有令人满意的表现。Linux内置的多个服务器,几乎包含了目前...
订阅51CTO邮刊你的位置:
&& 详细内容
《VISUAL C++项目开发案例全程实录》扫描[PDF]
本资料所属分类:
更新时间:日
如不能下载,请查看
学习资料下载:
中文名:&VISUAL C++项目开发案例全程实录作者:&图书分类:&软件资源格式:&PDF版本:&扫描出版社:&书号:&地区:&大陆语言:&简体中文简介:&
第1章 社区视频监控系统(Visual C++6.0+视频采集卡+Microsoft Access2000实现)视频讲解:1小时25分钟1.1 开发背景1.2 系统分析1.2.1 需求分析1.2.2 可行性分析1.2.3 编写项目计划书1.3 系统设计1.3.1 系统目标1.3.2 系统功能结构1.3.3 系统预览1.3.4 业务流程图1.3.5 编码规则1.3.6 数据库设计1.4 公共模块设计1.5 主窗体设计1.6 用户登录模块设计1.6.1 用户登录模块概述1.6.2 用户登录技术分析1.6.3 用户登录实现过程1.7 监控管理模块设计1.7.1 监控管理模块概述1.7.2 监控管理技术分析1.7.3 监控管理实现过程1.7.4 单元测试1.8 无人广角自动监控模块设计1.8.1 无人广角自动监控模块概述1.8.2 无人广角自动监控技术分析1.8.3 无人广角自动监控实现过程1.8.4 单元测试1.9 视频回放模块设计1.9.1 视频回放模块概述1.9.2 视频回放技术分析1.9.3 视频回放实现过程1.10 开发技巧与难点分析1.11 监控卡的选购及安装1.11.1 监控卡选购分析1.11.2 监控卡安装1.11.3 视频采集卡常用函数1.12 本章总结第2章 企业短信群发管理系统(Visual C++6.0+短信猫+Microsoft Access 2000实现)视频讲解:1小时23分钟2.1 开发背景2.2 系统分析2.2.1 需求分析2.2.2 可行性分析2.2.3 编写项目计划书2.3 系统设计2.3.1 系统目标2.3.2 系统功能结构图2.3.3 系统预览2.3.4 业务流程图2.3.5 数据库设计2.4 公共类设计2.4.1 自定义SetHBitmap方法2.4.2 处理WM-MOUSEMOVE事件2.5 主窗口设计2.6 短信猫设置模块设计2.6.1 短信猫设置模块概述2.6.2 短信猫设置技术分析2.6.3 短信猫设置实现过程2.7 电话簿管理模块设计2.7.1 电话簿管理模块概述2.7.2 电话簿管理技术分析2.7.3 电话簿管理实现过程2.7.4 单元测试2.8 常用语管理模块设计2.8.1 常用语管理模块概述2.8.2 常用语管理技术分析2.8.3 常用语管理实现过程2.9 短信息发送模块设计2.9.1 短信息发送概述2.9.2 短信息发送技术分析2.9.3 短信息发送实现过程2.9.4 单元测试2.10 短信息接收模块设计2.10.1 短信息接收模块概述2.10.2 短信息接收技术分析2.10.3 短信息接收实现过程2.10.4 单元测试2.11 开发技巧与难点分析2.11.1 显示“收到新信息”对话框2.11.2 制作只允许输入数字的编辑框2.12 短信猫应用2.13 本章总结第3章 企业电话语音录音管理系统(Visual C++6.0+语音卡+Microsoft Access 2000实现)视频讲解:1小时29分钟3.1 开发背景3.2 需求分析3.3 系统设计3.3.1 系统目标3.3.2 系统功能结构3.3.3 系统预览3.3.4 业务流程图3.3.5 数据库设计3.4 公共模块设计3.5 主窗体设计3.6 来电管理模块设计3.6.1 来电管理模块概述3.6.2 来电管理技术分析3.6.3 来电管理实现过程3.6.4 单元测试3.7 电话录音管理模块设计3.7.1 电话录音管理模块概述3.7.2 电话录音管理技术分析3.7.3 电话录音管理实现过程3.7.4 单元测试3.8 员工信息管理模块设计3.8.1 员工信息管理模块概述3.8.2 员工信息管理技术分析3.8.3 员工信息管理实现过程3.9 产品信息管理模块设计3.9.1 产品信息管理模块概述3.9.2 产品信息管理技术分析3.9.3 产品信息管理实现过程3.10 开发技巧与难点分析3.10.1 为程序设置系统托盘3.10.2 对话框的显示3.11 语音卡函数介绍3.12 本章总结第4章 局域网监控系统(Visual C++ 6.0+Microsoft Access 2000实现)第5章 餐饮管理系统(Visual C++ 6.0+Microsoft Access 2000实现)第6章 超市进销存管理系统(Visual C++ 6.0+Oracle 9i数据库实现)第7章 图书管理系统(Visual C++ 6.0+SQL Server 2000数据库实现)第8章 学生管理系统(Visual C++ 6.0+SQL Server 2000数据库实现)第9章 学生考试系统(Visual C++ 6.0+Microsoft Access 2003实现)第10章 人力资源管理系统(Visual C++6.0+SQL Server 2005数据库实现)第11章 图像处理系统(Visual C++ 6.0+GDI+技术实现)第12章 人事考勤管理系统(Visual C++ 6.0+SQL Server 2000实现)
[内容简介:]  本书以社区视频监控系统、企业短信群发管理系统、企业电话语音录音管理系统、局域网监控系统、餐饮管理系统、超市进销存管理系统、图书管理系统、学生管理系统、学生考试系统、人力资源管理系统、图像处理系统和人事考勤管理系统12个实际项目开发程序为案例,从软件工程的角度出发,按照项目的开发顺序,系统、全面地介绍了程序开发流程。从开发背景、需求分析、系统功能分析、数据库分析、数据库建模到系统开发,每一过程都进行了详细的介绍。  本书案例涉及行业广泛,实用性非常强。通过对本书的学习,读者可以了解各个行业的特点,能够针对某一行业进行软件开发,也可以通过光盘中提供的案例源代码和数据库进行二次开发,以减少开发系统所需要的时间。  本书光盘提供12个项目开发完整案例的同步教学视频,12个项目开发完整案例及其源程序,本书的服务网站还提供了内容丰富的素材库、题库、模块库、案例库和本书的答疑服务。本书是一本项目开发案例方面的参考书,适合有基本编程知识但还没有项目开发经验的软件开发初学者使用,尤其适合高校在校生进行毕业设计、课题设计时做参考。[内容截图:]
自带站内搜索End-->
相关学习资料}

我要回帖

更多关于 c 项目实例设计题目 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信