(简单工厂模式不是标准的设计模式)
class Fruit{
public:
virtual void getFruit()=0;
}
class Banana:public Fruit
{
public:
virtual void getFruit()
{
cout<<"我是香蕉"<<endl;
}
};
class Apple:public Fruit
{
public:
virtual void getFruit()
{
cout<<"我是苹果"<<endl;
}
};
class Factory
{
public:
Fruit* create(char *p)
{
if(strcmp(p,"banana")==0)
{
return new Banana;
}
else if(strcmp(p,"apple")==0)
{
return new Apple;
}
else
{
cout<<"no match"<<endl;
}
}
}
void main()
{
Factory *f=new Factory;
Fruit *fruit=NULL;
fruit=f->create("banana");
fruit->getFruit();
delete fruit;
fruit=f->create("apple");
fruit->getFruit();
delete fruit;
}
工厂模式
class Fruit{
public:
virtual void getFruit()=0;
}
class Banana:public Fruit
{
public:
virtual void getFruit()
{
cout<<"我是香蕉"<<endl;
}
};
class Apple:public Fruit
{
public:
virtual void getFruit()
{
cout<<"我是苹果"<<endl;
}
};
class AbFactory()
{
public:
virtual Fruit *createProduct()=0;
};
class BananaFactory{
public:
Fruit *CreateProduct()
{
return new Banana;
}
}
class AppleFactory{
public:
Fruit *CreateProduct()
{
return new Apple;
}
}
void main()
{
AbFactory *f=new AbFactory;
Fruit *fruit=NULL;
f=new BananaFactory;
fruit=f->Createproduct();
fruit-> GetFruit();
delete fruit;
delete f;
}
本质上,就是面向抽象类进行编程
抽象工厂模式
class Fruit{
public:
virtual void getFruit()=0;
}
class NorthBanana:public Fruit
{
public:
virtual void getFruit(){cout<<"北方香蕉"<<endl}
}
class SouthBanana:public Fruit
{
public:
virtual void getFruit(){cout<<"南方香蕉"<<endl}
}
class NortApple:public Fruit
{
public:
virtual void getFruit(){cout<<"北方苹果"<<endl}
}
class SouthApple:public Fruit
{
public:
virtual void getFruit(){cout<<"南方苹果"<<endl}
}
class AbstractFactory{
public:
virtual Fruit* CreateBanana()=0;
virtual Fruit* CreateApple()=0;
}
class NorthFactory:public AbstractFactory{
public:
virtual Fruit* CreateBanana(){
return new NorthBanana;
}
virtual Fruit* CreateApple(){
return new NorthApple;
}
}
class SouthFactory:public AbstractFactory{
public:
virtual Fruit* CreateBanana(){
return new SouthBanana;
}
virtual Fruit* CreateApple(){
return new SouthApple;
}
}
void main()
{
Fruit *f=NULL;
AbstractFactory *af=NULL;
af=new SouthFactory;
f=af->CreateApple;
f->getFruit();
delete f;
af=new SouthFactory;
f=af->CreateBanana;
f->getFruit();
delete f;
af=new NorthFactory;
f=af->CreateApple;
f->getFruit();
delete f;
af=new NorthFactory;
f=af->CreateBanana;
f->getFruit();
delete f;
delete af;
}