加粗样式
c++11及以上使用static局部变量就可以实现singleton了,其初始化和线程安全性质由c++语言规范保证
单例模式定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。条件:该类不能被复制。该类不能被公开的创造。
单例模式实现方式
1.懒汉式设计模式实现方式懒汉模式的特点延迟加载,配置文件的实例到用到的时候才会加载
1.1 静态指针 + 用到时初始化
1.2 局部静态变量
2.饿汉式设计模式没有多线程的问题
2.1直接定义静态对象
2.2静态指针 + 类外初始化时new空间实现
2.1直接定义静态对象
class Singleton {
public:
static Singleton& GetInstance();
private:
Singleton(){} Singleton(const Singleton&);
Singleton& operator= (const Singleton&);
private: static Singleton m_Instance; };
Singleton Singleton::m_Instance;
Singleton::GetInstance() { return m_Instance; }
//函数调用 Singleton& instance = Singleton::GetInstance();
工厂设计模式 定义一个创建对象的接口,让子类决定实例化哪个类,而对象的创建统一交由工厂去生产,有良好的封装性,既做到了解耦,也保证了最少知识原则。
简单工厂模式、工厂方法模式、抽象工厂模式
//程序实例(简单工厂模式)
有一家生产处理器核的厂家,它只有一个工厂,能够生产两种型号的处理器核。客户需要什么样的处理器核,一定要显示地告诉生产工厂
enum CTYPE {COREA, COREB};
class SingleCore
{
public:
virtual void Show() = 0;
};
//单核A
class SingleCoreA: public SingleCore
{
public:
void Show() { cout<<"SingleCore A"<
工厂方法模式
这家生产处理器核的产家赚了不少钱,于是决定再开设一个工厂专门用来生产B型号的单核,而原来的工厂专门用来生产A型号的单核。这时,客户要做的是找好工厂,比如要A型号的核,就找A工厂要;否则找B工厂要,不再需要告诉工厂具体要什么型号的处理器核了。下面给出一个实现方案:
//程序实例(工厂方法模式)
class SingleCore
{
public:
virtual void Show() = 0;
};
//单核A
class SingleCoreA: public SingleCore
{
public:
void Show() { cout<<"SingleCore A"<
抽象工厂模式
这家公司的技术不断进步,不仅可以生产单核处理器,也能生产多核处理器。现在简单工厂模式和工厂方法模式都鞭长莫及。抽象工厂模式登场了。它的定义为提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。具体这样应用,这家公司还是开设两个工厂,一个专门用来生产A型号的单核多核处理器,而另一个工厂专门用来生产B型号的单核多核处理器,下面给出实现的代码:
//程序实例(抽象工厂模式)
//单核
class SingleCore
{
public:
virtual void Show() = 0;
};
class SingleCoreA: public SingleCore
{
public:
void Show() { cout<<"Single Core A"<
装饰器设计模式
指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式
优点:
装饰器是继承的有力补充,比继承灵活。在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用;
缺点:
装饰模式会增加许多子类,过度使用会增加程序得复杂性。
观察者设计模式
指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。(QT的信号与槽)
设计模式的学习可以通过C++ QT框架来学习,QT中有许多的设计模式应用



