观察者模式,单例模式和工厂模式

持续更新中...

观察者模式:

https://blog.csdn.net/colinandroid/article/details/81113013

观察者模式:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。

Subject:就是“被观察”的角色,它将所有观察者对象的引用保存在一个集合中。

(1)保存注册的观察者对象

(2)注册观察者对象

(3)注销观察者对象

(4)通知所有注册的观察者对象

Observer:是抽象的“观察”角色,它定义了一个更新接口,使得在被观察者状态发生改变时通知自己。

ConcreteObserver:具体的观察者。

 

单例模式:

https://blog.csdn.net/q_all_is_well/article/details/82377917

实现特点:

(1)私有化该类的构造函数

(2)通过new在本类中创建一个本类对象

(3)定义一个公有的方法,将在该类中所创建的对象返回

实现方法:

(1)单例模式的饿汉式:饿了肯定要饥不择食。所以在单例类定义的时候就进行实例化

(2)单例模式懒汉式双重校验锁:在第一次用到类实例的时候才会去实例化

#include<mutex>
using namespace std;

class Singleton
{
private:
    static Singleton* m_instance;
    Singleton() {}
    //拷贝和赋值
    Singleton(const Singleton&) {};
    Singleton& operator=(const Singleton&) {};
    //它的唯一工作就是在析构函数中删除Singleton的实例
    class CGarbo 
    {
    public:
        ~CGarbo()
        {
            if (Singleton::m_instance)
                delete Singleton::m_instance;
        }
    };
    //定义一个静态成员,程序结束时,系统会自动调用它的析构函数
    static CGarbo Garbo; 

public:
    static Singleton* getInstance();
};

Singleton* Singleton::getInstance()
{
    if (NULL == m_instance)
    {
        std::mutex g_mutex;
        g_mutex.lock();//借用其它类来实现,如boost
        if (NULL == m_instance)
        {
            m_instance = new Singleton;
        }
        g_mutex.unlock();
    }
    return m_instance;
}

(3)内部类

 

工厂模式:

https://blog.csdn.net/u012156116/article/details/80857255

工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类

(1)简单工厂模式:一个工厂+一个运算基类+n个具体的运算类

(2)工厂模式:简单工厂+n个具体的工厂(解决简单工厂的高耦合,缺点是每增加一个产品类,就需要增加一个对应的工厂类,增加了额外的开发量)

(3)抽象工厂模式:(解耦,例业务逻辑与数据访问的解耦)(https://cloud.tencent.com/developer/article/1394271

posted @ 2019-08-14 15:38  行走的算法  阅读(1450)  评论(0编辑  收藏  举报