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;

    }

     

     

     

  • 相关阅读:
    根据系统的pid查询sql语句
    DORADO实现动态拼装查询条件
    一个Spring的配置管理接口
    MS SQL Server Management Studio连接到SQL Server命名实例的方法
    WSDL学习笔记
    显示MyBatis/Ibatis的SQL语句
    测试代码显示
    C#中一个项目中无法引用另外一个项目中的类的问题
    Learn How To Use LogMiner(Practice)
    WIN2003 IIS6 FastCGI php5.33配置重点
  • 原文地址:https://www.cnblogs.com/AlwinXu/p/1426291.html
Copyright © 2011-2022 走看看