面向对象设计原则(一共八种) C++设计模式(一共23种)

==================================================================

面向对象设计原则(一共八种) C++设计模式(一共23种)

==================================================================

 

 

目录

面向对象设计原则(一共八种) C++设计模式(一共23种)

1.面向对象设计原则(一共八种)

 

面向对象设计原则(1)

面向对象设计原则(2)

面向对象设计原则(3)

面向对象设计原则(4)

面向对象设计原则(5)

面向对象设计原则(6)

面向对象设计原则(7)

将设计原则提升为设计经验

1.设计习语Design Idioms

2.设计模式 DesignPatterns

3.架构模式Architectural Patterns

C++设计模式(一共23种)

组件协作:(晚绑定, 框架和应用程序之间松耦合)

<1>·TemplateMethod    模板模式  

<2>·Strategy  策略模式

<3>·Observer/Event     观察者/事件模式  (第一遍没有听的很懂,555……)

单一职责:

<4>·motivation装饰模式

<5>·Bridge

对象创建:

<6>·FactoryMethod

<7>·AbstractFactory

<8>·Prototype

<9>·Builder

对象性能:

<10>·Singleton.

<11>·Flyweight·

接口隔离:·

<12>·Facade

<13>·Proxy

<14>·Mecdiator·

<15>.Adapter

状态变化:

<16>·Memento

<17>·State

数据结构:

<18>·IComposite

<19>·Iterator

<20>·Chain of

<21>.Resposibility

行为变化:

<22>.command

<23>·Visitor

领域问题:

<24>·Interpreter

重构关键技法


其中理解八种设计原则,比理解23具体的设计模式更加的重要。在进在学习这方面的知识点,但是感觉其中有些部分第一遍听的不是懂,所以在这里做一下笔记,在以后的日子里面慢慢的加深理解,估计还要在看几遍。说实话,看这个需要一定的代码量和功底,但是学习过程中,明显看到自己还有一些不是那么的理解,加油。后面没有写完的部分,有空继续补充,心急吃不了热豆腐,先提前看一下设计模式部分,有助于理解怎么设计和写代码。

代码复用(C++面向对象是指 编译层面(单位的)的);而不是指代码的粘贴复制。

 

重新认识面向对象

>理解隔离变化

·从宏观层面来看,面向对象的构建方式更能适应软件的变化,

能将变化所带来的影响减为最小

>各司其职

·从微观层面来看,面向对更强调各个类的“责任\"

·由于需求变化导致的新增天=个应该影响原来类型的实现

是所谓各负其责

>对象是什么?

·从语言实现层面来看,对象封装了代码和数据。

·从规格层面讲,对象是一系列可被使用的公共接口。

·从概念层面讲,对象是某种拥有责任的抽象。

 

 

1.面向对象设计原则(一共八种)

 

面向对象设计原则(1)

依赖倒置原则(DIP)

·高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。

·抽象(稳定)不应该依赖于变化),实现细节应该依赖于抽象(稳定)。

 

 

面向对象设计原则(2)

开放封闭原则(OCP)

·对扩展开放,对更改封闭。

·类模块应该是可扩展的,但是不可修改。

 

 

面向对象设计原则(3)

单一职责原则(SRP)

·一个类应该仅有一个引起它变化的原因。

·变化的方向隐含着类的责任。

 

 

面向对象设计原则(4)

Liskov 替换原则(LSP)

·子类必须能够替换它们的基类(IS-A)。

·继承表达类型抽象。

 

 

面向对象设计原则(5)

接口隔离原则(ISP)

·不应该强迫客户程序依赖它们不用的方法。

·接口应该小而完备。

 

 

面向对象设计原则(6)

优先使用对象组合,而不是类继承

·类继承通常为“白箱复用”,对象组合通常为“黑箱复用”

·继承在某种程度上破坏了封装性,子类父类耦合度高。

·而对象组合则只要求被组合的对象具有良好定义的接口,度低。

 

 

面向对象设计原则(7)

封装变化点

·使用封装来创建对象之间的分界层,让设计者可以在分界的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。

 

 

 

针对接口编程,而不是针对实现编程

·不将变量类型声明为某个特定的具体类,而是声明为某个接口。

·客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。

·减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案。

 

 

面向接口设计      产业强盛的标志     接口标准化!

 

 

 

将设计原则提升为设计经验

1.设计习语Design Idioms

·Design Idioms 描述与特定编程语言相关的低层模式,技巧,

惯用法。

2.设计模式 DesignPatterns

·Design Patterns主要描述的是“类与相互通信的对象之间的组

织关系,包括它们的角色、职责、协作方式等方面。

3.架构模式Architectural Patterns

·Architectural Patterns描述系统中与基本结构组织关系密切的

高层模式,包括子系统划分,职责,以及如何组织它们之间关

系的规则。

 

 


C++设计模式(一共23种)

注:其中的红线圈出来为稳定部分,蓝线圈出来为变化部分

 

 

组件协作:(晚绑定, 框架和应用程序之间松耦合)

<1>·TemplateMethod    模板模式  

 模式定义:定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改(复用)一个算法的结构即可重定义(override重写)该算法的某些特定步骤。

面向对象设计原则(一共八种) C++设计模式(一共23种)_第1张图片

个人理解: 稳定里面有变化,稳定(非虚函数),不稳定(虚函数,让子类继承重写,局部的的功能)

 

 

 

<2>·Strategy  策略模式

模式定义: 定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。

面向对象设计原则(一共八种) C++设计模式(一共23种)_第2张图片

 

 

<3>·Observer/Event     观察者/事件模式  (第一遍没有听的很懂,555……)

模式定义: 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

扩展理解:Observer模式是基于事件的UI框架中非常常用的设计模式,也是MVC模式的一个重要组成部分。【【核心】抽象的通知依赖关系  】

 面向对象设计原则(一共八种) C++设计模式(一共23种)_第3张图片

 

 

单一职责:

<4>·motivation装饰模式

模式定义: 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码&减少子类个数)。

面向对象设计原则(一共八种) C++设计模式(一共23种)_第4张图片

个人理解:

面向对象设计原则(一共八种) C++设计模式(一共23种)_第5张图片

面向对象设计原则(一共八种) C++设计模式(一共23种)_第6张图片

<5>·Bridge

模式定义:

个人理解:

 

 

 

对象创建:

<6>·FactoryMethod

<7>·AbstractFactory

<8>·Prototype

<9>·Builder

对象性能:

<10>·Singleton.

<11>·Flyweight·

接口隔离:·

<12>·Facade

<13>·Proxy

<14>·Mecdiator·

<15>.Adapter

状态变化:

<16>·Memento

<17>·State

数据结构:

<18>·IComposite

<19>·Iterator

<20>·Chain of

<21>.Resposibility

行为变化:

<22>.command

<23>·Visitor

领域问题:

<24>·Interpreter

 

 

重构关键技法

静态->动态

早绑定-〉晚绑定

继承->组合

编译时依赖->运行时依赖

紧耦合->松耦合

 

 

 

 

 

 

 

你可能感兴趣的:(C/C++,设计模式)