https://blog.csdn.net/mao834099514/category_6888943.html
单例模式
单例模式:主要解决一个全局使用的类频繁的创建和销毁的问题。单例模式下可以确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的三个要素:
- 某个类只能有一个实例;
- 必须自行创建这个实例;
- 必须自行向整个系统提供这个实例;
实现步骤:
- 将类的构造函数定义为私有方法,使其他处的代码无法通过调用该类的构造方法来实例化该类的对象,只有通过该类的静态方法来得到该类的唯一实例。
- 在该类内提供一个静态方法,当调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。
单例模式的多线程安全问题:
在多线程下可能会创建多个实例。为保证单例模式在多线程下的线程安全,一般采用饿汉式或懒汉式;
- 饿汉式:基于类加载机制避免线程的同步问题。
- 懒汉式:通过双锁机制实现线程安全。
/// 内部静态变量的懒汉实现(C++11 线程安全)//
class Single {
public:
// 获取单实例对象
static Single &GetInstance(){
// 局部静态特性的方式实现单实例
static Single signal; // 如果含有数据成员,需要修改构造函数对数据进行初始化
return signal;
}
// 还需要定义一些外部函数
private:
// 禁止外部构造
Single();
// 禁止外部析构
~Single();
// 禁止外部复制构造
Single(const Single &signal);
// 禁止外部赋值操作
const Single &operator=(const Single &signal);
};
/// 内部静态变量的懒汉实现 //
template <typename T>
class Singleton
{
public:
static T* get_instance() {
static T t;
return t;
}
protected:
Singleton(){}
~Singleton(){}
private:
Singleton(Singleton&) {}
Singleton(const Singleton&) {}
Singleton& operator= (Singleton&) {}
Singleton& operator= (const Singleton&) {}
};
工厂模式
工厂模式:主要解决接口选择的问题。该模式下定义了一个创建对象的接口,让其子类自己决定实例化哪个一个工厂类,使其创建过程延迟到子类进行。
优点:解耦,代码复用,更改功能容易;
观察者模式
定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所以依赖于它的对象都得到通知并被自动更新。
观测者模式中分为观察者和被观察者,当被观察者发生装填改变时,观察者会被通知。主要是为了解决对象状态改变给其他对象通知的问题,其实现类似于观察者在被观察者那注册了一个回调函数。
- https://blog.csdn.net/m0_46308273/article/details/117196098
- https://blog.csdn.net/qq_35865125/article/details/88322729
- https://www.cnblogs.com/lovesong/p/5272752.html
发布订阅模式
https://www.jianshu.com/p/d755909b85f8
https://www.cnblogs.com/lovesong/p/5272752.html
https://blog.csdn.net/qq_35865125/article/details/88322729
https://blog.csdn.net/weixin_31443757/article/details/113453143
https://blog.csdn.net/m0_46308273/article/details/117196098
装饰器模式
对已经存在的类进行装饰,依次来拓展一些功能,从而动态的为一个对象增加新的功能。装饰器模式是一种用户代替继承的技术,无需通过继承增加子类就能拓展对象的新功能,使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
缺点:多层装饰比较复杂
使用场景:1、扩展一个类的功能。 2、动态增加功能,动态撤销。
代理模式
https://blog.csdn.net/mao834099514/article/details/70848595?spm=1001.2014.3001.5501