05.抽象工厂模式【ABSTRACT FACTORY PATTERN】
2014-08-18 23:27
225 查看
推荐文章:http://www.jellythink.com/archives/62
类图:
类图解读:
Factory:定义一个工厂
Factory1,Factory2:工厂中的不同的两条生产线。
ProductA,ProductB:需要生产的产品类型定义(接口)
ProductA1,ProductA1;ProductB1,ProductB2:需生产的具体产品。
在一个工厂中,创建多条生产流水线,来生产自定义的产品,只是相对工厂方法模式中,每一条可生产加了一条生产之路可生产出新产品(可扩展性)。
实现代码:
#include <iostream>
usingnamespace std;
// Product A
class ProductA
{
public:
virtualvoidShow()=0;
};
class ProductA1:publicProductA
{
public:
voidShow()
{
cout<<"I'm ProductA1"<<endl;
}
};
class ProductA2:publicProductA
{
public:
voidShow()
{
cout<<"I'm ProductA2"<<endl;
}
};
// Product B
class ProductB
{
public:
virtualvoidShow()=0;
};
class ProductB1:publicProductB
{
public:
voidShow()
{
cout<<"I'm ProductB1"<<endl;
}
};
class ProductB2:publicProductB
{
public:
voidShow()
{
cout<<"I'm ProductB2"<<endl;
}
};
// Factory
class Factory
{
public:
virtualProductA*CreateProductA()=0;
virtualProductB*CreateProductB()=0;
};
class Factory1:publicFactory
{
public:
ProductA*CreateProductA()
{
returnnewProductA1();
}
ProductB*CreateProductB()
{
returnnewProductB1();
}
};
class Factory2:publicFactory
{
ProductA*CreateProductA()
{
returnnewProductA2();
}
ProductB*CreateProductB()
{
returnnewProductB2();
}
};
int main(intargc,char*argv[])
{
Factory* factoryObj1=newFactory1();
ProductA* productObjA1=factoryObj1->CreateProductA();
ProductB* productObjB1=factoryObj1->CreateProductB();
productObjA1->Show();
productObjB1->Show();
Factory* factoryObj2 = newFactory2();
ProductA* productObjA2 = factoryObj2->CreateProductA();
ProductB* productObjB2 = factoryObj2->CreateProductB();
productObjA2->Show();
productObjB2->Show();
if(factoryObj1!=NULL)
{
delete factoryObj1;
factoryObj1=NULL;
}
if(productObjA1!=NULL)
{
delete productObjA1;
productObjA1=NULL;
}
if(productObjB1!=NULL)
{
delete productObjB1;
productObjB1=NULL;
}
if(factoryObj2!=NULL)
{
delete factoryObj2;
factoryObj2=NULL;
}
if(productObjA2!=NULL)
{
delete productObjA2;
productObjA2=NULL;
}
if(productObjB2!=NULL)
{
delete productObjB2;
productObjB2=NULL;
}
}
类图:
类图解读:
Factory:定义一个工厂
Factory1,Factory2:工厂中的不同的两条生产线。
ProductA,ProductB:需要生产的产品类型定义(接口)
ProductA1,ProductA1;ProductB1,ProductB2:需生产的具体产品。
在一个工厂中,创建多条生产流水线,来生产自定义的产品,只是相对工厂方法模式中,每一条可生产加了一条生产之路可生产出新产品(可扩展性)。
实现代码:
#include <iostream>
usingnamespace std;
// Product A
class ProductA
{
public:
virtualvoidShow()=0;
};
class ProductA1:publicProductA
{
public:
voidShow()
{
cout<<"I'm ProductA1"<<endl;
}
};
class ProductA2:publicProductA
{
public:
voidShow()
{
cout<<"I'm ProductA2"<<endl;
}
};
// Product B
class ProductB
{
public:
virtualvoidShow()=0;
};
class ProductB1:publicProductB
{
public:
voidShow()
{
cout<<"I'm ProductB1"<<endl;
}
};
class ProductB2:publicProductB
{
public:
voidShow()
{
cout<<"I'm ProductB2"<<endl;
}
};
// Factory
class Factory
{
public:
virtualProductA*CreateProductA()=0;
virtualProductB*CreateProductB()=0;
};
class Factory1:publicFactory
{
public:
ProductA*CreateProductA()
{
returnnewProductA1();
}
ProductB*CreateProductB()
{
returnnewProductB1();
}
};
class Factory2:publicFactory
{
ProductA*CreateProductA()
{
returnnewProductA2();
}
ProductB*CreateProductB()
{
returnnewProductB2();
}
};
int main(intargc,char*argv[])
{
Factory* factoryObj1=newFactory1();
ProductA* productObjA1=factoryObj1->CreateProductA();
ProductB* productObjB1=factoryObj1->CreateProductB();
productObjA1->Show();
productObjB1->Show();
Factory* factoryObj2 = newFactory2();
ProductA* productObjA2 = factoryObj2->CreateProductA();
ProductB* productObjB2 = factoryObj2->CreateProductB();
productObjA2->Show();
productObjB2->Show();
if(factoryObj1!=NULL)
{
delete factoryObj1;
factoryObj1=NULL;
}
if(productObjA1!=NULL)
{
delete productObjA1;
productObjA1=NULL;
}
if(productObjB1!=NULL)
{
delete productObjB1;
productObjB1=NULL;
}
if(factoryObj2!=NULL)
{
delete factoryObj2;
factoryObj2=NULL;
}
if(productObjA2!=NULL)
{
delete productObjA2;
productObjA2=NULL;
}
if(productObjB2!=NULL)
{
delete productObjB2;
productObjB2=NULL;
}
}
相关文章推荐
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
- 23种设计模式之-----抽象工厂模式(AbstractFactory pattern)
- 创建型模式之抽象工厂模式(AbstractFactory Pattern)C++实现******
- Python实现设计模式--03.抽象工厂模式(Abstract Factory Pattern)
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- [置顶] 设计模式之八S:抽象工厂模式(Abstract Factory Pattern)
- 设计模式――抽象工厂模式(Abstract Factory Pattern)
- 设计模式 - Abstract Factory Pattern(抽象工厂模式)
- 抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式(abstract factory pattern)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 解读设计模式----抽象工厂模式(AbstractFactory Pattern)
- 设计模式学习总结-抽象工厂模式(Abstract Factory Pattern)
- 浅谈 java 设计模式--抽象工厂模式(AbstractFactory pattern)
- 设计模式学习笔记--抽象工厂模式(Abstract Factory Pattern)【创建型模式】
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
- C++设计模式之——抽象工厂模式(AbstractFactoryPattern)
- Java设计模式——抽象工厂模式(Abstract Factory Pattern)
- 设计模式——抽象工厂模式【Abstract Factory Pattern】
- 抽象工厂模式(Abstract Factory Pattern)