美文网首页
(GeekBand)C++设计模式第一讲笔记

(GeekBand)C++设计模式第一讲笔记

作者: 竺沛 | 来源:发表于2017-03-20 22:16 被阅读0次

设计模式简介

软件设计具有良好的复用性,才是好的设计。但是软件复杂的变化却是服用新的天敌;
软件设计复杂的根本原因有:变化(客户需求变化、技术平台变化、开发团队的变化、市场变化... ...)。面对复杂的问题可以进行分而治之,将大的问题分解为许多小的问题;对于更高层次的问题就需采用抽象的方法,忽视它的具体细节,而去处理泛化和理想化的对象模型。

面向对象设计原则

为了较好的复用性,就必须隔离变化减小变化带来的影响;各司其责,各个内有不同的责任,那么由于需求的变化导致的新增类型不会对之前造成影响;
面向对象的八大设计原则:1. 依赖倒置原则DIP(高层模块稳定不应该依赖于底层的变化;2抽象稳定不应该依赖于实现细节的变化;但都应该依赖于抽象);2. 开放封闭原则OCP(对(类模块)扩展开放,对(类模块)更改封闭);3. 单一职责原则(一个类应该仅有一个引起它变化的原因,变化方向隐含着类的责任);4. liskov替换原则LSP(子类能够替换它们的基类is-a);5. 接口隔离原则ISP(接口应该小而完备);6. 优先使用对象组合而不是类继承(类继承通常为“白箱复用”,组合为“黑箱复用”,继承在某种程度上破坏了封装性,而组合只要有良好的接口就好);7. 封装变化点(使用封装来创建对象见的分界层);8. 针对接口编程,而不是针对实现。

模板方法

设计模式从目的来看主要分为三大类:创建型、结构型、行为型;从封装变化角度可以分为:

重构:静态->动态、早绑定->晚绑定、继承->组合、编译时依赖-运行时依赖、

组件协作模式通过晚期绑定实现松耦合,是二者间协作时常用模式,包括:Template Method、strategy、Observer/Event。

对于一项任务,具有稳定的操作结构,但是子步骤却有很多改变需求,或者无法和整体结构达到完整的时间同步。就需要采用Template Method,使得子类可以复用一个算法的结构同时支持子类的结构变化,是一个非常常用的设计模式。


Template Method结构

策略模式Strategy

定义一系列算法,把他们一个个封装起来,并使他们可互相替换,是的算法可以独立于使用它的客户程序而变化。


策略模式的动机
Strategy结构

观察者模式Observer

一个对象的状态发生改变,所有依赖的所有对象都将得到通知,但是如果这种依赖关系过于紧密,将使得软件不能很好地抵御变化。使用Observer可以将这种依赖关系弱化,并稳定,从而实现松耦合。

定义对象一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新即为观察者模式。

Observer结构 Observer特点

装饰模式Decorator

属于单一职责模式,在软件设计过程中,使用继承的到的代码,往往会随着需求的变化,之类急剧膨胀,同时充斥着很多重复代码,这个时候关键是划分责任。
有时候可能会过多的使用继承来扩展功能,这种扩展方式缺乏灵活性,随着扩展增加,会产生很多的子类。在这种情况下就可以采用Decorator将继承用复合来替换,能大幅减小代码的复杂度,并且更为灵活。
Decorator在接口上表现为继承的模式,但是在实现上又表现为复合的关系,即使用了一个Component类。其主要应用于解决主体类在多个方向上的扩展功能。


Decorator结构

桥模式Bridge

桥模式就是将抽象部分(业务功能)与实现(平台)部分分离,使他们都可以独立变化的设计模式。使用对象间的组合关系解耦呢抽象和实现之间的故有绑定关系,让抽象和思想有自己的变化维度。
桥模式主要解决由于某些代码由于固有逻辑原因,使得它们有两个或多个变化维度,是代码的复杂度大规模增加的问题。一般在两个非常强的变化维度可以采用Bridge的扩展模式。


Bridge结构

相关文章

  • (GeekBand)C++设计模式第一讲笔记

    设计模式简介 软件设计具有良好的复用性,才是好的设计。但是软件复杂的变化却是服用新的天敌;软件设计复杂的根本原因有...

  • GeekBand C++设计模式

    5.对象创建 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持...

  • (GeekBand)C++设计模式第一讲作业

    MainForm.h FileSplitter.h

  • c++设计模式(一)--GeekBand

    一 策略模式策略模式和 Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽...

  • 【geekband】C++设计模式1

    具体详见我的博客:(作业的码在博客最后)design patterns责任是思考面向对象设计的一个观点从概念层面,...

  • C++设计模式(一) GeekBand

    好的软件设计是多用代码复用,但实际设计中却要遇到许多变化,而变化是复用的天敌。为了能够尽量减少变化所带来的设计复杂...

  • C++设计模式(二) GeekBand

    “对象创建”模式通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支...

  • C++设计模式(三) GeekBand

    “对象性能”模式 面向对象很好地解决了“抽象”的问题,但是不可避免地要付出一定的代价。对于通常情况来讲,面向对象的...

  • GeekBand C++设计模式(三)

    这里,对设计模式的概念就不细说了,凡是用过或者看过这方面书籍的都应该有所了解。 鄙人认为正是设计模式的出现,使得C...

  • [GeekBand] C++设计模式-2

    Factory Method 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类...

网友评论

      本文标题:(GeekBand)C++设计模式第一讲笔记

      本文链接:https://www.haomeiwen.com/subject/omgmnttx.html