工厂类;
定义一个类来负责创建其他类的实例,被创建的实例通常有共同的接口,有共同的父类。简单的工厂类实际是根据传入工厂类的参数来动态决定创建那个产品类。比如建筑工厂,能产生水泥、砖块,钢筋。当需要水泥时,工厂就产出水泥。在这种工厂类中要有必要的判断逻辑,能根据外部的信息决定究竟创建那个具体类的对象。这种设计思想类似于类的动态联编,即在程序执行时根据输入的信息由父指针来动态的创建子类的对象。但是不难发现工厂类的缺点。由于工厂类集中了创建所有实例对象的逻辑代码,这种高内聚的方法做的并不好。当系统中具体类的产品不断增多是,工厂类就要做相关的修改,而这却违背了设计模式中最基本的“开-——闭”原则。在“开——闭”原则中要求对于类的修改是关闭的,类的扩展是开放的。具体工厂类的实例代码如下例:
#include<iostream>
#include<iomanip>
using namespace std;
class Animal
{
public:
virtual void cry()=0;
};
class bird:public Animal
{
public:
virtual void cry()
{
cout<<"叽叽喳喳"<<endl;
}
};
class lion:public Animal
{
public:
virtual void cry()
{
cout<<"吼吼"<<endl;
}
};
class Factory
{
public:
Animal *pe;
Factory()
{
}
Animal* CreatObject(int a)
{
switch(a)
{
case 1:
return new bird;
break;
case 2:
return new lion;
break;
default:
break;
}
}
};
int main()
{
int i;
Factory fa;
Animal *an=NULL;
while(cin>>i&&i)
{
an=fa.CreatObject(i);
if(i==1||i==2)
an->cry();
if(i==1||i==2)
delete an;
}
return 0;
}