非本人原创,如有侵权,请联系删除,仅做参考理解使用.
//
// Created by xhome on 2020/4/24.
//
#include <iostream>
using namespace std;
//抽象父类
class Fruit{
public:
virtual void sayName()=0;
};
//本质是用到了多态,父类的指针指向子类的对象.
class AbFactory {
public:
virtual Fruit* CreateBanana() = 0;
virtual Fruit* CreateApple() = 0;
};
//子类1
class SouthBanana : public Fruit{
public:
virtual void sayName(){
cout << "I am south banana" << endl;
}
};
class NorthBanana : public Fruit{
public:
virtual void sayName(){
cout << "I am north banana" << endl;
}
};
//子类2
class SouthApple : public Fruit {
public:
virtual void sayName()
{
cout << "I am south apple" << endl;
}
};
class NorthApple : public Fruit {
public:
virtual void sayName()
{
cout << "I am north apple" << endl;
}
};
class NorthFactory :public AbFactory{
public:
virtual Fruit * CreateBanana()
{
return new NorthBanana;
}
virtual Fruit * CreateApple()
{
return new NorthApple;
}
};
class SouthFactory :public AbFactory{
public:
virtual Fruit * CreateBanana()
{
return new SouthBanana;
}
virtual Fruit * CreateApple()
{
return new SouthApple;
}
};
int main() {
Fruit * fruit =NULL;
AbFactory * af = NULL;
af = new SouthFactory;
fruit = af->CreateApple();
fruit->sayName();
delete fruit;
af->CreateBanana();
fruit = af->CreateBanana();
fruit->sayName();
delete fruit;
af = new NorthFactory;
fruit = af->CreateApple();
fruit->sayName();
delete fruit;
fruit = af->CreateBanana();
fruit->sayName();
delete fruit;
return 0;
}