工厂模式
2012-08-29 20:10
120 查看
引用维基百科的释义:工厂方法模式是一种实现了”工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。
我得理解是:所谓的工厂模式,即是一种产品(concrete(具体)类)由一种专门的工厂生产,即新增一个concreteProduct需要新增一个concreteFacroty,concreteProduct的具体创建过程由concreteFactory负责,两者是一一对应的关系。
这样就需要两个抽象基类,Factory和Product。Factory,创建对象的工厂方法的基类,Product就是创建出来的对象的基类。
还需要一个接口函数,Factory::FactoryMethod(),这是一个纯虚函数,具体在派生类中实现,创建对应的对象。
通俗来说,类似于游戏,兵营可以生产兵,且规则是这样的,因为要生产的兵种类不一,比如骑兵、步兵、弓手。但是骑兵只能在马场生产,步兵在步兵营生产,弓手在靶场生产。每种兵都在不同的特定兵营生产,这样特定的兵营就是concreteFactory,特定的兵种就是concreteProduct。对于每一种兵种来说,都有血量、攻击力等相同的属性,因此,这些可以放在一个Product类中,具体的兵种类型则由这个Product类派生而来。同理,在生产兵种的过程中,通常需要一个读条的过程等其他生产兵种需要的共同的东西,这些则可放入一个Factory类中,具体的兵营类型由这个Factory类派生。
具体实现如下:
我得理解是:所谓的工厂模式,即是一种产品(concrete(具体)类)由一种专门的工厂生产,即新增一个concreteProduct需要新增一个concreteFacroty,concreteProduct的具体创建过程由concreteFactory负责,两者是一一对应的关系。
这样就需要两个抽象基类,Factory和Product。Factory,创建对象的工厂方法的基类,Product就是创建出来的对象的基类。
还需要一个接口函数,Factory::FactoryMethod(),这是一个纯虚函数,具体在派生类中实现,创建对应的对象。
通俗来说,类似于游戏,兵营可以生产兵,且规则是这样的,因为要生产的兵种类不一,比如骑兵、步兵、弓手。但是骑兵只能在马场生产,步兵在步兵营生产,弓手在靶场生产。每种兵都在不同的特定兵营生产,这样特定的兵营就是concreteFactory,特定的兵种就是concreteProduct。对于每一种兵种来说,都有血量、攻击力等相同的属性,因此,这些可以放在一个Product类中,具体的兵种类型则由这个Product类派生而来。同理,在生产兵种的过程中,通常需要一个读条的过程等其他生产兵种需要的共同的东西,这些则可放入一个Factory类中,具体的兵营类型由这个Factory类派生。
具体实现如下:
/*Product.h*/ #ifndef PRODUCT_H_INCLUDED #define PRODUCT_H_INCLUDED class Product { public: virtual ~Product(){}; Product(){}; }; class concreteProduct:public Product { public: virtual ~concreteProduct(){std::cout<<"concreteProduct destructure...\n";} concreteProduct() { std::cout<<"concreteProduct constructure...\n"; } }; #endif // PRODUCT_H_INCLUDED /*Factory.h*/ #ifndef FACTORY_H_INCLUDED #define FACTORY_H_INCLUDED class Factory { public: virtual ~Factory(){std::cout<<"Factory destructure...\n";} Factory(){}; void createOperation(); protected: virtual Product* FactoryMethod() = 0; }; class concreteFactory:public Factory { public: ~concreteFactory(){std::cout<<"concreteFactory destructure...\n";} concreteFactory() { std::cout<<"concreteFactory constructure...\n"; } private: Product* FactoryMethod(); }; void Factory::createOperation() { Product *p = FactoryMethod(); } Product* concreteFactory::FactoryMethod() { return new concreteProduct; } #endif // FACTORY_H_INCLUDED /*测试函数*/ #include<iostream> #include"Product.h" #include"Factory.h" using namespace std; int main() { Factory *p = new concreteFactory(); p->createOperation(); delete p; return 0; }
相关文章推荐
- 设计模式——工厂三姐妹
- 简单工厂模式与策略模式
- 设计模式:简单工厂模式
- php基础---单例模式&&工厂模式
- 设计模式──简单工厂模式
- 23种设计模式(2):工厂方法模式
- 【设计模式】——工厂家族
- PetShop4.0视频讲解 - 通过简单案例理解petshop4.0的工厂模式
- 设计模式之工厂模式
- 设计模式(一)工厂模式Factory
- 设计模式-工厂模式
- 设计模式-工厂模式-简单工厂
- JAVA设计模式——工厂模式
- 设计模式(六)——JDK中的那些工厂方法
- C#设计模式之简单工厂模式
- JAVA设计模式之工厂模式
- (创建模式)工厂模式factory method
- 简单工厂模式——设计模式1
- 《大话设计模式》num01---简单工厂模式
- 简单工厂模式和策略模式的区别