简单工厂模式(C++描述)

一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。

1.静态工厂方法统一管理对象的创建。
静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。

2.静态工厂方法推迟了产品的实例化。
通过XML配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译。

二.简单工厂模式还是有缺点的,后面的工厂方法模式和抽象工厂模式就是对这些缺点的改善。讲完了这三种模式将会有一个对比。以下以Nokia手机为例,采用简单工厂模式设计的源代码雏形。

 

/* Nokia抽象产品 */ #pragma once #include #include 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 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; }

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chollima/archive/2009/03/13/3985570.aspx

你可能感兴趣的:(C/C++,c++,nokia,string,产品,iostream,class)