首页 > 代码库 > C++技术问题总结-第14篇 常用设计模式及其应用场景
C++技术问题总结-第14篇 常用设计模式及其应用场景
设计模式是对设计原则的具体化。用江湖话说就是武林秘籍,总结出来的一些固定套路,编程界的《葵花宝典》。
个人意见,编程过程中设计原则进行遵循,对设计模式进行借鉴。完全按照套路来,有时反而简单问题复杂化。
常用的模式及其场景如下。
1) 单例模式。
单例模式是一种常用的软件设计模式。
在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
对应类图。
应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
2) 工厂模式。
工厂模式主要是为创建对象提供了接口。
工厂模式按照《Java与模式》中的提法分为三类:
a. 简单工厂模式(Simple Factory)
b. 工厂方法模式(Factory Method)
c. 抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。
对应类图。
下面是使用工厂模式的两种情况:
a. 在编码时不能预见需要创建哪种类的实例。
b. 系统不应依赖于产品类实例如何被创建、组合和表达的细节。
3) 策略模式。
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。
对应类图。
应用场景如下。
a. 一件事情,有很多方案可以实现。
b. 我可以在任何时候,决定采用哪一种实现。
c. 未来可能增加更多的方案。
d. 策略模式让方案的变化不会影响到使用方案的客户。
举例业务场景如下。
系统的操作都要有日志记录,通常会把日志记录在数据库里面,方便后续的管理,但是在记录日志到数据库的时候,可能会发生错误,比如暂时连不上数据库了,那就先记录在文件里面。日志写到数据库与文件中是两种算法,但调用方不关心,只负责写就是。
4) 观察者模式。
观察者模式又被称作发布/订阅模式,定义了对象间一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
对应类图。
应用场景如下。
a. 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
b. 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
业务场景举例:气象站的故事,气象监控系统必须可以实时跟踪当前的天气状况(温度、湿度、大气压力),并且可以在三种不同设备上显示出来(当前天气状况、天气统计、天气预测)。
C++技术问题总结-第14篇 常用设计模式及其应用场景