设计模式学习


分割线

设计模式学习方法

重构获得模式(Refactoring To Pattern):

  • 现代设计特征是需求的频繁变化,而设计模式的关键点就是寻找变化点,然后在变化点处使用设计模式,从而来更好的应对需求变化。

重构关键技法:

不好的做法比较好的做法说明
静态绑定动态绑定如:不使用特定的类作为变量,使用抽象类或者接口作为变量
早绑定晚绑定如:绑定延迟到子类或者其他类,耦合性低
继承组合有时组合比继承可能会更好,“白箱”->“黑箱”
编译时依赖运行时依赖如:不使用特定的类作为变量,使用抽象类或者接口作为变量
紧耦合松耦合-

如何看类图

  • 区分稳定部分和变化部分

分割线

设计模式原则

依赖倒置原则(Dependency Inversion Pattern, DIP)

  • 1.高层模块(稳定层)不应该依赖低层模块(变化层),二者都应该依赖于抽象(稳定,封装变化)
  • 2.抽象(稳定)不应该依赖于实现(变化),实现应该依赖于抽象。
  • 3.针对接口编程,依赖抽象不依赖具体。

开放封闭原则(Open Close Pattern, OCP)

  • 1.对扩展开放,对修改关闭。
  • 2.类模块应该是可扩展的,但是不可修改。

单一职责原则(Single Responsibility Pattern, SRP)

  • 1.一个类应该只有一个引起她变化的原因。
  • 2.变化的方向隐含着类的责任。

Liskov替换原则(Liskov Substitution Pattern, LSP)

  • 1.子类必须能够替换他们的基类(is-a关系)。
  • 2.继承表达类型抽象。

接口隔离原则(Interface Segregation Pattern, ISP)

  • 1.不应该强迫客户端程序依赖它们不使用的方法。
  • 2.接口应该小而完备。

封装变化点

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

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

  • 1.类继承通常是白箱复用,对象组合通常是黑箱复用(继承可能会暴露更多的接口)
  • 2.继承的子类在某种程度上破坏了封装性,且子类与父类的耦合度较高。
  • 3.对象组合只要求被组合的对象具有良好的接口,耦合度较低。

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

  • 1.不将变量声明为某个特定的具体类,而是声明为某个抽象类或者接口。
  • 2.客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。
  • 3.减少系统中各部分的依赖关系,从而实现“高内聚,低耦合”的设计。

分割线

GOF模式分类

延迟:可以理解为定义一个虚函数,让子类去实现或者重写。

从目的划分:

  • 1.创建型(creational)模式:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体实现带来的冲击。
  • 2.结构型(structural)模式:通过类继承或者对象组合方式获得灵活的结构,从而应对需求变化对对象的结构带来的冲击。
  • 3.行为型(behavioral)模式:通过类继承或者对象组合的方式来划分类与对象的职责,从而应对需求变化为多个交互的对象带来的冲击。

从范围划分:

  • 1.类模式处理类与子类的静态关系。(继承,编译时绑定)
  • 2.对象模式处理对象间的动态关系。(组合,声明对象变量为接口或者抽象类,运行时绑定)

从封装变化角度划分:

  • 1.组件协作:
模式说明
模板方法(Template Method)参考Unity(cocos)生命周期
策略者模式(Strategy)-
观察者模式/事件模式(Observer/Event)-
  • 2.单一职责:
模式说明
装饰模式(Decorator)-
桥接模式(Bridge)-
  • 3.对象创建:
模式说明
简单工厂(simple Factory)-
工厂方法(Factory Method)-
抽象工厂(Abstruct Factory)-
原型链(Prototype)-
建造者模式(Builder)-
  • 4.对象性能:
    • 面对对象很好的解决了抽象问题,但是不可避免的要付出一定的代价。对于通常情况来讲,面对对象的成本大都可以忽略不计,但是某些情况下,面对对象所带来的成本必须谨慎对待。
模式说明
单例模式(Singleton)-
享元模式(Flyweight)对象池技术
  • 5.接口隔离:
模式说明
门面模式(Facade)-
代理模式(Proxy)-
中介模式(Mediator)-
适配器模式(Adapter)-
  • 6.状态变化:
模式说明
备忘录模式(Memento)-
状态机(State)-
  • 7.数据结构:
模式说明
组合模式(Composite)-
迭代器(Iterator)-
责任链模式(Chain Of Responsibility)-
  • 8.行为变化:
模式说明
命令模式(Command)-
访问者模式(Visitor)-
  • 8.领域问题:
模式说明
解释器模式(Interpreter)-

设计模式

单例模式

  • 一、概述:
    • 保证一个类在整个场景中仅有一个实例,且提供了访问该实例的全局访问点。
  • 二、例子:
//常用写法
class singleton1 
{
public:
	static singleton1& I() 
	{
		if (nullptr == _instance) { _instance = new singleton1(); }
		return *_instance;
	}
private:
	static singleton1* _instance;
};

未完、待续

说明
仅作为学习使用。码字一时爽,一直码字一直爽
如有侵权,请联系作者删除。
参考:
1.GeekBand视频教程
2.Json_wangqiang的设计模式解密
3.gpp.tkchu.me
4.C语言辅导班-设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值