C++简单工厂模式

发布时间:2016-12-8 4:09:47 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"C++简单工厂模式",主要涉及到C++简单工厂模式方面的内容,对于C++简单工厂模式感兴趣的同学可以参考一下。

一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。   1.静态工厂方法统一管理对象的创建。 静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。 2.静态工厂方法推迟了产品的实例化。 通过XML配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译。   二.简单工厂模式还是有缺点的,后面的工厂方法模式和抽象工厂模式就是对这些缺点的改善。讲完了这三种模式将会有一个对比。以下以Nokia手机为例,采用简单工厂模式设计的源代码雏形。 [cpp] view plaincopy /* Nokia抽象产品 */   #pragma once   #include <string>   #include <iostream>   class CNokia   {   public:       CNokia(void);   public:       virtual ~CNokia(void);   public:       virtual bool MakeCall(const std::string & number) const = 0;   };   #include "Nokia.h"      CNokia::CNokia(void)   {   }      CNokia::~CNokia(void)   {   }      #pragma once   #include "nokia.h"      class CN96 : public CNokia   {   public:       CN96(void);   public:       virtual ~CN96(void);   public:       virtual bool MakeCall(const std::string & number) const;   };      /* N96型号的Nokia手机产品类 */   #include "N96.h"      CN96::CN96(void)   {       std::cout << "生产一部N96" << std::endl;   }      CN96::~CN96(void)   {   }      bool CN96::MakeCall(const std::string & number) const   {       std::cout << "我在用N96,拨打号码是:" <<  number.c_str() << std::endl;       return false;   }      #pragma once   #include "nokia.h"      class CN95 :public CNokia   {   public:       CN95(void);   public:       virtual ~CN95(void);   public:       virtual bool MakeCall(const std::string & number) const;   };      /* N95型号的Nokia手机产品类 */   #include "N95.h"      CN95::CN95(void)   {       std::cout << "生产一部N95" << std::endl;   }      CN95::~CN95(void)   {   }      bool CN95::MakeCall(const std::string & number) const   {       std::cout << "我在用N95,拨打号码是:" <<  number.c_str() << std::endl;       return false;   }      /*N85, N81, ...*/      /* 工厂类 */   #pragma once   #include "N96.h"   #include "N95.h"   #include "N85.h"   #include "N81.h"   #include <cassert>   class CNokiaSimpleFactory   {   public:       CNokiaSimpleFactory(void);   public:       ~CNokiaSimpleFactory(void);   public:            /* 静态工厂方法 */       static CNokia * CreateNokia(const std::string & model);   };      #include "NokiaSimpleFactory.h"      CNokiaSimpleFactory::CNokiaSimpleFactory(void)   {   }      CNokiaSimpleFactory::~CNokiaSimpleFactory(void)   {   }      CNokia * CNokiaSimpleFactory::CreateNokia(const std::string & model)   {       if (model == "N96")       {           return new CN96();       }       else if (model == "N95")       {           return new CN95();       }       else if (model == "N85")       {           return new CN85();       }       else if (model == "N81")       {           return new CN81();       }       else       {           assert(false);       }       return NULL;   }         /* main方法,可以看做客户端 */   #include "stdafx.h"   #include "NokiaSimpleFactory.h"      int _tmain(int argc, _TCHAR* argv[])   {       CNokia * nokia = NULL;           /*             modeName 可以从外部XML文件中读取,运行过程中动态的              决定该创建哪一种型号的手机           */       std::string modeName = "N96";       nokia = CNokiaSimpleFactory::CreateNokia(modeName);       nokia->MakeCall("123456789");           delete nokia;       nokia = NULL;       return 0;   }  

上一篇:JavaScript学习4---ajax的使用
下一篇:数据库读写分隔

相关文章

相关评论