c++设计模式学习笔记(一)

 

1.       Factory 模式

 

 

Factory设计模式是主要是为了方便对象的创建而建立的,封装了对对象的创建。这样我们就能通过调用ConcreteFactory中的CreateProduct ()方法创建一个Product 子类对象,而不需要过多的继承。Factory 模式主要适合要创建的对象属于一类,如果要创建的对象不属于一类,那么就要用到AbstractFactory模式。

 

类的调用:

          Factory   f = new ConcreteFactory();

          Product p = f->CreateProduct();

可能遇到的问题:如果Product有很多子类

解决方法:1 为每一个Product子类再Factory中添加一个方法,这样Factory类永远不会关闭。2。创建一个Factory类的子类,利用方法的多态性进行操作。

 

 2 AbstractFactory模式

AbstractFactory模式主要是为了给一组(多种类)提供创建的封装接口,而Factory是为一个种类的类提供创建的封装接口。AbstractFactory通常是通过Factory模式实现。

类的调用:

          AbstractFactory   f = new ConcreteFactory1();

          f->CreateProductA1();

          f->CreateProductB1();

 

3. Singleton 模式

 

Singleton模式主要是通过维护一个static 变量来产生唯一的对象实例。该模式经常和Factory模式一块使用,因为Factory 类经常只需要一个实例对象。

代码实现:

Singleton.h:

      #ifndef _SINGLETON_H

      #define _SINGLETON_H

      #include <iostream>

      using namespace std;

 

      class Singleton

      {

       public:

            static Singleton* Instance();

       protected:

            Singleton();

       private:

            static Singleton *_instance;

     };

     #endif

Singleton.cpp:

      #include "Singleton.h"

 

      Singleton* Singleton::_instance = 0;

      Singleton::Singleton()

      {

           cout<<"Singleton..."<<endl;

      }

 

      Singleton* Singleton::Instance()

      {

         if(_instance == 0)

         {

               _instance = new Singleton();

         }

        return _instance;

      }

 

      int main()

      {

           Singleton *single = Singleton::Instance();

           Singleton *single1 = Singleton::Instance();

           if(single == single1)

           {

                 cout<<"the same Singleton..."<<endl;

           }

           return 0;

}

 

 

 

原文地址:https://www.cnblogs.com/AlwinXu/p/1426291.html