C++ 设计模式(一)模板方法和观察者模式

本文探讨了设计模式的重要性和应用场景,包括依赖倒置、开放封闭原则等核心设计原则。模板方法模式用于定义算法骨架,允许子类定制部分步骤。同时,观察者模式在对象间建立了一对多的依赖关系,实现通知更新。学习设计模式有助于提升代码质量和可维护性,是软件开发中的宝贵经验。
摘要由CSDN通过智能技术生成

设计模式

设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。

内存模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模式设计原则

依赖倒置原则

高层模块不应该依赖低层模块,二者都应该依赖抽象
抽象不应该依赖具体实现,具体实现应该依赖于抽象

开放封闭原则

一个类应该对扩展开放,对修改关闭

面向接口编程

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

封装变化点

将稳定点和变化点分离,扩展修改变化点;让稳定点与变化点的实现层次分离;

单一职责原则

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

里氏替换原则

子类型必须能够替换掉它的父类型;主要出现在子类覆盖父类实现,原来使用父类型的程序可能出现错误;覆盖了父类方法却没实现父类方法的职责

接口隔离原则

不应该强迫客户依赖于他们不用的方法;
一般用于处理一个类拥有比较多的接口,而这些接口涉及到很多职责

对象组合优于类及继承

继承耦合度高,组合耦合度低

什么情况下使用设计模式?

系统的关键依赖点
能明确找到变化点
能明确找到复用方向
对需求变化方向熟悉

如何找到设计模式

从重构中获得

重构

静态转变为动态
早绑定转变为晚绑定
继承转变为组合
编译时依赖转变为运行时依赖
紧耦合转变为松耦合

为什么要学习设计模式

从已有的且证明有效的设计模式中获取灵感,少走弯路
通用语言,知道在已有的设计模式扩展代码
体会模式设计,设计自己的行之有效的设计模式

模板方法

定义

定义一个操作中的算法的股价,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可冲定义该算法的某些特定步骤。

背景

某个品牌动物园,有一套固定的表演流程,但是其中有若干个表演子流程受欢迎程度比较低,希望将这几个表演流程创新,以尝试迭代更新表演流程

要点

非常常用的设计模式,子类可以复写父类的子流程,使父类的大流程更丰富
反向控制流程的典型应用
父类protected保护子类需要复写的子流程;这样子类的子流程只能父类来调用
充分体现了依赖倒置原则

本质

通过固定算法骨架来约束子类的行为

结构图

在这里插入图片描述

观察者模式

定义

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

背景

气象站发布气象资料给数据中心,数据中心经过处理,将气象信息更新到两个不同的显示终端(A和B)

要点

观察者模式使得我们可以独立地改变目标与观察者,从而使二者之间的关系松耦合。
观察者自己决定是否订阅通知,目标对象并不关注谁订阅了。
观察者不要以来通知顺序,目标对象也不知道通知顺序。
常使用在基于事件的ui框架中,也是MVC的组成部分。
常使用在分布式系统中,actor框架中。

本质

触发联动

结构图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值