软件设计模式

 

2.面向对象设计原则

(1)依赖倒置原则(DIP)

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

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

解决方案:提出抽象类

 

(2)开放封闭原则(OCP)

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

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

 

(3)单一职责原则(SRP)

一个类应该i仅有一个引起他变化的原因。

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

 

(4)Liskov替换原则(LSP)

子类必须能够替换他们的基类(is-a)

继承表达类型抽象.

 

(5)接口隔离原则(ISP)

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

接口应该小而完备。

 

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

类继承是白箱复用,对象组合是黑箱复用

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

 

(7)封装变化点

使用封装来创建对象间的分界层,让设计者可以在分界的一端进行修改而不影响另一端的使用

 

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

 

模板方法
稳定中有变化,主流程稳定,部分变化
流程12345,24是变化的
虚函数,多态
早绑定变成晚绑定

策略模式
应用会应用到多种算法,将算法放到应用中会比较麻烦,要将算法和应用解耦
旧版:违反开闭原则
算法变化,应用稳定

观察者模式
通知依赖关系,一个对象发生改变,所有依赖于它的对象都收到通知
比如进度条
旧版:违反依赖倒置原则,比如进度条的表现形式要变

装配器模式
多重继承导致代码变得复杂,出现很多重复的代码
通过使用组合而非继承的手法,装配器模式实现了在运行时动态扩展对象的能力。
一般来说继承于一个类,同时里面又有该类成员,多半是装配器模式。

桥模式
子类急剧膨胀,同时充斥着重复代码,关键是要划清责任

对象创建类型
对创建对象时用

工厂模式
定义一个创建对象的接口,让子类来确定新建哪个类
隔离类对象使用者和具体类型的耦合关系,将所要创建的具体对象工作延迟到了子类,从而实现扩展

抽象工厂:
一系列相互依赖对象的创建。工厂模式的话不能保证系列对象之间能相互匹配。(家族工厂)
工厂方法是抽象工厂的特例

原型模式:
工厂方法中将对象类和factory类合并,利用拷贝构造函数。
应对结构比较复杂的类,利用拷贝原型对象来创建新的对象。

对象性能模式:解决面向对象的成本过大的问题
单件模式:对于特殊的类,必须保证它们在系统中只有一个对象,单线程安全


考虑多线程,可以加锁来使得避免创建多个对象。
加锁,再判断是否为空,并新建对象。
改进版,加锁前再看看单例是否为空,可以避免使用锁,即双检查锁。但是由于内存读写reorder导致双检查锁不安全

正常来说new是:分配内存,调用构造器,把内存给目标指针,经过reorder后可能变成分配内存,把内存给目标,调用构造器
C++11后编译器支持atomic,使得内存分配不reorder

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值