Boolan 设计模式_1

主要内容:

本讲主要讲解面向对象设计的八大原则,和其中五个设计模式。

1. 综述

目标:可复用(编译单位级别的复用,不是源代码的拷贝粘贴)
方法:面向对象
解决复杂问题方法:分解和抽象。
面向对象:适应变化、各负其责。

2. 面向对象设计八大原则

还是画图理解起来更容易些。。。


面向对象设计八大原则

【接口标准化】分析问题,有时候应该跳出软件,结合人类发展历史。。。秦始皇统一六国。
雕版印刷(紧耦合) --> 活字印刷(松耦合)

3. GOF-23模式

3.1 template method
  • 应用程序开发人员使用lib时,由于lib的开发人员已经写好程序的主流程和部分步骤的具体实现(这些是相对稳定的), 应用开发人员只需对lib的类进行继承,并重写部分(override)它的成员函数(推荐为protdected类型,不被外界直接调用)即可。(晚绑定)。
  • 前提是有稳定和不稳定的成分,设计模式才有用武之地。如果全部都稳定,或是全部都不稳定,那么就不能使用设计模式。
  • 设计模式看类图时,要找到其中稳定和变化的部分。
  • library说:“你(应用程序)不要调用我(library),让我调用你!”
  • 虚函数和函数指针都是晚绑定。
3.2 strategy
  • 【要动态的看问题,而不只是静态的看待问题。加上时间轴,考虑到未来的变化】
  • 使用多态的变量(类内和类外),要用指针。
  • 为解决同一个问题的不同算法设计一个类,并实现各种的计算方法,当有新的算法时,则扩展算法(定义新的类来实现)。不同算法之间可以相互替换(变化)。
  • 如果if...else if...是绝对稳定的,那么大部分可以采用strategy method。
  • 优点:当存在一些无用的算法时, 代码具有良好的本地性,加载的代码,就是调用相应的哪个实现方法,但利用if..else if...他们也会加载这些无用的算法到代码段,影响性能。
3.3 observer/event观察者模式
  • 编译时依赖。违背依赖倒置原则。
  • c++支持多继承,最好一个是主基类,其他的都是接口类。
  • 对象间一对多的依赖关系,一个对象的状态变化时,所有依赖于它的对象得到通知,并各自自动更新。
  • 目标和观察者独立更改,松耦合。
  • 目标自动发送通知,无需指定观察者。
  • 观察者自己决定是否订阅通知,不订阅通知就不用将这个观察者放入到目标虽维护的对象集合。目标无需知道观察者是否订阅了通知。
  • 单一职责原则表现突出的模式
3.4 decorator
  • 组合-->继承;编译时-->运行时的多态;使用时,编译时装饰-->运行时装饰。
  • CryptoStream继承于Stream,并拥有一个Stream的指针(使用这种方法99%都是decorator模式)。继承是为了继承接口,完善接口规范,指针是为了实现运行时多态,实现具体的类。
  • 当多个类继承于同一个类时,多个类的相同的成员应该提到基类中,如果其中有些子类并不使用某些基类数据成员,这时就可以将这些数据成员放入一个中间类(DecoratorStream)中.
  • 主体操作和扩展操作应该分开继承。



3.5 bridge
  • 类的数目1+n+n*m-->1+n+m
  • 当多个类继承同一个类,基类中有一些不被子类重写的成员函数时,可将基类拆分成两个类。(Messager和MessageImp)
    抽象部分(平台实现)和实现部分(业务实现),多个变化维度分离,使他们可以独立变化。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容