Factory.hpp
#ifndef _FACTORY_H_
#define _FACTORY_H_
#include<iostream>
#include"Product.hpp"
using namespace std;
class Factory {
public:
virtual Laptop* produceLaptop() = 0;
virtual MobilePhone* produceMobilePhone() = 0;
};
class AppleFactory :public Factory{
public:
Laptop* produceLaptop() { return new AppleLaptop(); }
MobilePhone* produceMobilePhone() { return new AppleMobilePhone(); }
};
class XiaomiFactory :public Factory {
public:
Laptop* produceLaptop() { return new XiaomiLaptop(); }
MobilePhone* produceMobilePhone() { return new XiaomiMobilePhone(); }
};
#endif
Product.hpp
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
#include<iostream>
using namespace std;
class Laptop {
public:
virtual void compileCppProgram() = 0;
};
class MobilePhone {
public:
virtual void sendShortMessage() = 0;
};
class AppleLaptop :public Laptop {
public:
void compileCppProgram() {
cout << "Apple Laptop compiles a cpp program." << endl;
}
};
class AppleMobilePhone :public MobilePhone {
public:
void sendShortMessage() {
cout << "Apple MobilePhone sends a short message." << endl;
}
};
class XiaomiLaptop :public Laptop {
public:
void compileCppProgram() {
cout << "Xiaomi Laptop compiles a cpp program." << endl;
}
};
class XiaomiMobilePhone :public MobilePhone {
public:
void sendShortMessage() {
cout << "Xiaomi MobilePhone sends a short message." << endl;
}
};
#endif