• 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;

    }

     

     

     

  • 相关阅读:
    如何查看ipynb文件
    使用python绘制爱心
    使用python将十进制数转为ip地址
    python使用下划线分割数字,提高可读性
    python的字符串基本操作
    pandas为csv添加新的行和列
    使用pandas库实现csv行和列的获取
    pycharm批量更改变量名
    (转)Doxygen文档生成工具
    MVC架构学习之Smarty学习——病来而蔫
  • 原文地址:https://www.cnblogs.com/AlwinXu/p/1426291.html
Copyright © 2020-2023  润新知