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;

    }

     

     

     

  • 相关阅读:
    php无限极分类
    HDU 1176 免费馅饼 (类似数字三角形的题,很经典,值得仔细理解的dp思维)
    HDU 1158(非常好的锻炼DP思维的题目,非常经典)
    HDU 1165 公式推导题
    HDU 1069 Monkey and Banana(转换成LIS,做法很值得学习)
    HDU 1059(多重背包加二进制优化)
    HDU 1058(打表)
    oracle11g之管理oracle数据库笔记(理论基础知识)
    oracle11g之Oracle体系结构(理论基础知识)
    HDU 1025 LIS二分优化
  • 原文地址:https://www.cnblogs.com/AlwinXu/p/1426291.html
Copyright © 2011-2022 走看看