设计模式-策略模式单例模式

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/L1558198727/article/details/89947655

策略模式

对象使用的算法是变化的,对象是稳定的
将稳定和稳定的部分隔离开
面向接口编程 之后使用工厂模式

单例模式

系统中特殊的类 只能出现一个实例
设计一种方法 只能发回一个对象
绕过常规的构造器 只提供一个对象
方法:
1.构造函数 和 拷贝函数都写成private的 屏蔽系统的构造函数
2. 自己写一个create函数 静态的

但是多线程是不安全的

class Singleton{
private:
	Singleton();
	Singleton(const Singleton& other);
public:
	static Singleton* getinstance()
	static Singleton* m_instance;
}
singleton singleton::getinstance (){
	if(m_instance == nullptr){
		m_instance new Singleton();
	}
	return m_instance
}

线程安全版本,但是有性能瓶颈

singleton singleton::getinstance (){
	Lock lock;//加锁
	if(m_instance == nullptr){
		m_instance new Singleton();
	}
	return m_instance
}

双检查锁

singleton singleton::getinstance (){
	if(m_instance == nullptr){
		Lock lock;//加锁
		if(m_instance == nullptr){
			m_instance new Singleton();
		}
	}
	return m_instance
}

内存reorder

双检查锁
	分配内存
	调用构造器
	赋值

内存读写 reorder
	分配内存
	赋值
	调用构造器
展开阅读全文

没有更多推荐了,返回首页