
设计模式
huashuolin001
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式(C++实现)(总)
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式乃一个程序员的内功修炼。有很多关于设计模式的书籍,比如轻松易读的《大话设计模式》、最为经典的GoF的《设计模式》、国人的经典原创《道法自然》等,网上关于设计模式的资料也非常多,且内容全面。但关于设计模式的书籍和网上的资料使用C++代码来举例实现的并不多,例如G原创 2020-08-27 14:45:19 · 988 阅读 · 0 评论 -
设计模式(C++实现)(十二)——观察者模式
示例问题:当一个对象发生改变,需要同时改变其他很多对象的时候,如何让着对个对象同时监听一个对象?分析:将所有待改变的对象抽象一个通用的类和方法,作为基类的观察者。一个对象改变的时候去通知所有的观察者(执行基类观察者的抽象方法)解决方案:Observer.h该文件实现了观察者的基类CBaseObserver(封装了通用的执行方法),通知者的基类CBaseNotifier(能够...原创 2019-06-05 15:25:12 · 312 阅读 · 0 评论 -
设计模式(C++实现)(四)——工厂方法模式
该篇承接上一篇,简单工厂模式。同样的问题,工厂方法模式又会如何处理,会带来何种好处?示例问题:输入两个数和运算符号,得到结果?分析:在该问题,最开始运算符号,只有“+”,“-”,“*”,“/”,可是随着运算符的增加,该如何扩展程序?解决方案:Operation.h运算操作类,同简单工厂模式的该文件#pragma once//运算基类class COperat...原创 2019-06-10 22:03:47 · 409 阅读 · 0 评论 -
设计模式(C++实现)(二十四)——解释器模式
示例问题:编写示例程序,解析json格式数据。分析:像我们程序员日常使用的json解析、正则表达式、更甚者编译器编译代码,这些其实都是一种制定了规则,将一些符号进行翻译,解释成特定的功能,其实这些都用了解释器模式的思想。解决方案:json数据示例{ "ID": 1, "name": "小明", "age": 13, "DetailInfo": [{ "mat...原创 2019-06-22 21:05:37 · 381 阅读 · 0 评论 -
设计模式(C++实现)(十三)——抽象工厂模式
示例问题:一个项目最初使用SQLServer数据库,后来根据项目情况要使用mysql数据库,此时需要更改所有和数据库有关的接口,工作量大,如果后期又要切换成PostgreSQL数据库,则所有和数据库有关的接口又要都改一遍。有没有方法能够在切换数据库的时候,不修改这么多接口?分析:可使用这个思路来解决:确定一个厂商的工厂,就可以确定所有物品都是来源于该厂商。比如要获取耐克的鞋、裤子、上衣...原创 2019-06-06 12:07:01 · 336 阅读 · 0 评论 -
设计模式(C++实现)(十四)——适配器模式
示例问题:早期代码的一些功能在使用很有价值,在不满足现有代码的接口要求,该如何处理?分析:用现有代码的接口将早期代码的功能封装起来。解决方案:Adapter.h在文件中,实现了目标类Ctarget(含通用接口),老的类COldClass(需要被适配成通用的接口),适配器类CAdapterForOldCalss(将老的类的功能适配成通用接口)。#pragma once...原创 2019-06-07 18:18:24 · 392 阅读 · 0 评论 -
设计模式(C++实现)(二十五)——组合模式
示例问题:一家总部在北京的大型公司,在全国几大城市设有分公司,比如上海设有华东区分部、在成都设有西南区分部,然后在一些省会城市还设有办事处,比如西南区的重庆办事处、贵阳办事处。无论是在北京总部,还是在成都西南区分部、重庆办事处等都有财务部、技术部等。总部、分部、办事处存在隶属关系,是一种树状结构,要求按照树状结构展示所有的财务部、技术部。分析:这是一种部分和整体的关系。成都西南区分部对...原创 2019-06-17 15:48:09 · 344 阅读 · 0 评论 -
设计模式(C++实现)(十五)——桥接模式
示例问题:在智能手机发展起来之前,诺基亚、摩托罗拉等传统手机都没有统一的操作系统,他们的软件各自独立。如需增加MP3功能、通讯录功能、短信功能等都需要在各自的手机品牌上分别实现。这种情况,该如何设计代码来描述。注意:品牌和手机软件的功能都可能会随时增加。分析:手机品牌种类和软件种类都很繁多,如果创建手机基类和软件基类,在每个手机品牌子类中分别实现软件的子类,则当手机品牌增加或者软件种类...原创 2019-06-20 19:40:42 · 420 阅读 · 0 评论 -
设计模式(C++实现)(二十)——命令模式
示例问题:在软件开发这个行业,有一个重要的职位——项目经理,这个人对内负责项目及项目团队的管理,对外负责和产品经理、领导等的沟通。项目经理对外沟通获得所有的需求,记录需求内容,撤销需求(当产品经理或者领导觉得某条需求不妥时),当需求整理到可以做产品的时候,会将任务分配给程序员去开发。编程描述上面问题。分析:如果没有项目经理这个职位,让程序员直接和产品经理、领导沟通,并负责项目的管理,可...原创 2019-06-25 20:13:23 · 482 阅读 · 0 评论 -
设计模式(C++实现)(二十三)——享元模式
示例问题:一个制造杯子的厂商,主要生产大、中、小圆柱形杯子(这3种规格的杯子上印有各种各样的文字),以及特殊造型杯子1,特殊造型杯子2。现需要定制模具来生产杯子,用代码解决该问题。分析:由于大、中、小圆柱形杯子上印有成千上万种文字,不可能为印有每一种文字的杯子都制造一个模具。只有制造好了大、中、小杯子的模具,之后能够灵活在上面印刷文字,才是上上策。解决方案:Flyweight....原创 2019-06-24 16:14:53 · 352 阅读 · 0 评论 -
设计模式(C++实现)(十七)——原型模式
示例问题:实现一个类的时候,通常会重载运算符“=”,然后可以将同一个类的对象用“=”赋值给另外一个对象。这实际上这就是原型模式的一种应用了(原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。)下面就阐述下重载运算符“=”(使用原型模式)带来的好处。未重载运算符“=”(未使用原型模式):UnProtoType.h#pragma once#include ...原创 2019-06-26 13:35:57 · 354 阅读 · 0 评论 -
设计模式(C++实现)(二十二)——中介者模式
示例问题:windows的消息机制,对于在Windows下做开发的人员来说,可以说是必备的知识。即键盘、鼠标、应用程序、应用程序窗口之前的消息通信,均通过Windows操作系统的消息队列、消息循环等完成,编写示例程序,描述应用程序窗口之间通过Windows操作系统完成相互通讯的过程。分析:若没有Windows操作系统提供的消息队列、消息循环等实现应用程序或应用程序窗口之间的通讯,而是由...原创 2019-06-22 22:05:46 · 404 阅读 · 0 评论 -
设计模式(C++实现)(二十一)——职责链模式
示例问题:软件在运行时出了问题,需要解决的时候,是不是会出现下述这种很头痛的情况。比如,前端网页无法加载显示图片了,这个问题去找前端的同事处理,前端的同事看了下,说不是他的问题,是中间件传输过来的数据有问题;又找中间件的同事去看,中间件的同事说,是后端java那块发送过来的数据有问题;又去找java开发的同事,java开发的同事说,数据库表结构损坏导致出了问题;又去找数据库的同事解决问题,最终...原创 2019-06-16 17:13:37 · 359 阅读 · 1 评论 -
设计模式(C++实现)(十一)——建造者模式
示例问题:解决一个问题的步骤及顺序都相同,但是每一个步骤所用的方法可能不同。设计一种模式解决该问题分析:要保证每个步骤都实现,且顺序固定。可灵活变换步骤的实现方法。这种模式要注意固定步骤及顺序,做到避免调用者去使用每个步骤而导致出错(遗漏步骤,或者弄错顺序)。解决方案:Builder.h该文件内,实现了建造者的基类CBaseBuilder了,和3个具体的建造者(继承建造者基...原创 2019-06-02 22:00:21 · 389 阅读 · 0 评论 -
设计模式(C++实现)(二)——单例模式
示例问题:一个程序中,有一个管理类,这个管理类,只想实例化一个对象,且要保证这个类只有一个实例化对象。分析:全局变量不能解决该问题,全局变量不能防止一个类实例化多个对象。解决方案:Singleton.h单例类的实现该类的构造函数和析构函数声明为私有的(为了防止除了提供该类的全局访问点外的其他方法创建该类的对象)该单例模式的实现,是利用static关键字的特性。即st...原创 2019-05-19 17:08:34 · 404 阅读 · 0 评论 -
设计模式(C++实现)(五)——装饰模式
示例问题:一个对象除了有重要的职责要进行外,还需要动态的执行一些“装饰”职能,这些“装饰”职能的使用不固定。如一个人除了工作外,每天还要选择穿不同的衣服。如何实现人对穿衣的动态组合?分析:如果将所有的穿衣组合,均用子类的形式实现,这样的话子类太多,且会新买衣服。如何动态的实现对人的穿衣(装饰)?装饰模式,即可实现这样的动态装饰解决方案:Decorator.h实现装饰基类,及...原创 2019-05-22 17:08:02 · 385 阅读 · 0 评论 -
设计模式(C++实现)(六)——代理模式
示例问题:如何隐藏外界对一个对象的访问,且要使用该对象的功能?分析:代理模式,就是为其他对象提供一种代理以控制对这个对象的访问。解决方案:Proxy.h其中CChildB类代理了CChildA类的功能#pragma once#include <iostream>class CBase{public: CBase() { } virt...原创 2019-05-26 13:32:04 · 290 阅读 · 0 评论 -
设计模式(C++实现)(三)——简单工厂模式
示例问题:输入两个数和运算符号,得到结果?分析:在该问题,最开始运算符号,只有“+”,“-”,“*”,“/”,可是随着运算符的增加,该如何扩展程序?解决方案:Operation.h在该文件中,实现运算的基类,并分别实现加、减、乘、除运算子类#pragma once//运算基类class COperation{public: COperation() {...原创 2019-05-17 22:37:55 · 425 阅读 · 0 评论 -
设计模式(C++实现)(八)——模板方法模式
示例问题:一个网页里面包含图片的展示,这些图片根据来源不同,有不同的加载显示方式,如何实现?分析:这是一个典型的父子类之间的继承、多态问题。需要将网页展示的共同部分在父类中实现,子类分别实现不同的图片加载显示方法即可。这是我们常用的父子类之间的继承、多态的应用,其实这也是一种设计模式,即模板方法模式。解决方案:Template.h定义了网页展示的基类,及包含图片展示的3种网...原创 2019-05-26 16:55:33 · 323 阅读 · 0 评论 -
设计模式(C++实现)(九)——状态模式
示例问题:篮球运动员在比赛的时候,会因为体力、情绪等影响竞技状态。比如,刚上场的时候,体力充沛、动作灵活、投篮神准;打了8分钟过后,身体疲惫、动作变慢;下场休息3分钟并喝了一瓶红牛过后,体力恢复、恢复了运动能力和投篮手感;最后决胜3分钟,比分犬牙交错,肌肉紧张、身体匹配、精神兴奋。编写程序,描述各个状态下,运动员的情况。分析:如果创建一个篮球运动员类,在该类中实现一个展示运动员情况的函...原创 2019-06-25 00:16:24 · 374 阅读 · 0 评论 -
设计模式(C++实现)(十六)——策略模式
示例问题:一个问题,有三种解决方法,每种解决方法,适用于不同的场景,灵活设计切换每种解决方法来解决该问题,并可新增解决方法。分析:要能灵活的切换解决问题的方法,且能够灵活新增方法。解决方案:Strategy.h在该文件中,实现了策略的基类,及三个策略的子类#pragma once#include <iostream>//策略基类class ISt...原创 2019-05-19 15:08:40 · 359 阅读 · 0 评论 -
设计模式(C++实现)(七)——迭代器模式
示例问题STL的里面迭代器已经实现了vector、list、map等容易的迭代访问。同样的问题,一个聚集类对象,顺序的去访问其中的各个元素,而又不暴露该对象的内部表示,就是迭代器模式了。用下面的这个示例来体会下迭代器模式的思想。分析无解决方案Iterator.h#include <iostream>#include <vector>#inclu...原创 2019-06-25 20:44:25 · 342 阅读 · 0 评论 -
设计模式(C++实现)(十)——备忘录模式
示例问题:类似于虚拟机的快照功能,编写一个能够记录对象运行过程中状态的功能,用以日后恢复某种状态。分析:能够保存不同阶段的状态,并用以恢复。不能对调用程序暴露备份的细节。解决方案:MyClass.h实现了需要备忘的类CMyClass(主要使用的类),备忘录类CMemento(记录重要数据),备忘录管理类CMementoManager(管理各个阶段的备忘录)#pragm...原创 2019-05-29 14:41:44 · 370 阅读 · 0 评论 -
设计模式(C++实现)(十八)——外观模式
示例问题:有三个子系统,客户程序需要使用这三个子系统的接口,而无需考虑子系统内部的实现。分析:这是不是我们平时编程中常用到的一种方法,将一系列问题封装成一个子系统,然后提供子系统的接口给其他程序调用。其实这种思维就是外观模式的设计思维。解决方案:Facade.h该文件中CClassA、CClassB、CClassC只是示例子系统中的功能,CSubSystemA、CSubSy...原创 2019-06-12 20:10:20 · 317 阅读 · 0 评论 -
设计模式(C++实现)(十九)——访问者模式
示例问题:对于应届毕业生找工作是去大公司还是去小公司的问题,网上有诸多说法。比如,管理制度和规章制度方面,小公司不是很健全,大公司比较健全;综合能力提升方面,小公司人少,要做的事多,对综合能力提升较快,大公司则专注某一个模块,综合能力锻炼不是太多,但可以把这个模块做精做细;职位上升方面,小公司人少,机会较多,而大公司由于人多,所以往上走就比较困难,同时公司让一个人去负责一个大项目的机会也很少。...原创 2019-06-13 21:50:10 · 429 阅读 · 0 评论 -
设计模式(C++实现)(一)——设计模式总原则及六大原则
设计模式六大原则总原则:开闭原则(Open Close Principle)。开闭原则就是说对扩展开放,对修改关闭。1、单一职责原则不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。2、里氏替换原则(Liskov Substitution Principle)里氏代换原则(Liskov Substitution Principl...原创 2019-05-11 19:53:09 · 1348 阅读 · 0 评论