zoukankan      html  css  js  c++  java
  • 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;

    }

     

     

     

  • 相关阅读:
    课堂讨论电子版
    项目目标文档
    系统利益相关者
    实训八(游戏背景)
    实训七(项目准备与创建)
    实训六(Cocos2dx游戏分享到微信朋友圈----AppID的获取)
    实训五(Cocos2dx-3.x 打包apk再理解)
    实训四(cocos2dx sharesdk集成-1)
    实训三(cocos2dx 3.x 打包apk)
    实训二(cocos2dx 2.x 打包apk)
  • 原文地址:https://www.cnblogs.com/AlwinXu/p/1426291.html
Copyright © 2011-2022 走看看