今天第一次写学习笔记,当着为自己的学习开个好头,学习C++设计模式,我主要从如下三个问题的方式来理解自己所学习内容。
1.什么是工厂模式?
工厂,简而言之就是用来生产和组装产品的地方,工厂模式嘛,简单来说就是用来生产对象及组装对象的。
2.为什么要用工厂模式?
因为有以下2个方面原因:1)当我们为实现多态时,经常存在子类继承抽象父类的情况,即父类定义这一个接口,具体的子类去实现它。这样在用的时候会出现 用父类指针指向子类 如:A *pA =new A1(参数),一旦子类比较多时,出现 xx new之类的代码比较多,特别是当系统复杂时,这样对系统的可维护性和扩展性不好,另外父类指针的命名也是个不小的问题。2) 有些会出现如下情况,如A的子类有A1,A2,B需要用到A,但B不知道要具体实例化A哪个的那个子类,但是B的子类B1中知道。
基于以上两个问题,就需要用到工厂模式,这样就引出工厂模式的两个重要的特征。1)封装对象的创建,管理对象的创建。 2)使具体化类的操作延迟到子类中。
3.怎么用?
如下类设计图,具体说明了怎么用。
工厂相关的关键代码如下。
#if !defined(__factory_factory_h)
#define __factory_factory_h
#include <CProduct.h>
class factory
{
public:
virtual CProduct * CreateProduct(int newflag)=0;
protected:
private:
};
#endif
#if !defined(__factory_ConcreteFactory_h)
#define __factory_ConcreteFactory_h
#include <factory.h>
#include <CProduct.h>
class ConcreteFactory : public factory
{
public:
CProduct * CreateProduct(newflag);
protected:
private:
};
#include "ConcreteFactory.h"
CProduct * ConcreteFactory::CreateProduct(newflag)
{
// TODO : implement
if(newflag==1)
{
return new ConcreteProduct1();
}
else if(newflag==2)
{
return new ConcreteProduct1();
}
}
#endif
2013-3-2 晚