简述
简单工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
简单案例
现在要生产手机,包括iphone、小米等。尝试用设计模式来实现这个过程。
这里我们用到了简单工厂模式。
1. 设计手机工厂基类
// 手机工厂基类
class PhoneFactory {
public:
virtual void Product() {
cout << "通用手机工厂生产了一部手机" << endl;
}
};
// 手机类型
enum PhoneType
{
iphone,
MI,
huawei
};
2. 设计手机子类
class AppleFactory : public PhoneFactory {
public:
virtual void Product() {
cout << "苹果手机工厂生产了一部Iphone" << endl;
}
};
class huaweiFactory : public PhoneFactory {
public:
virtual void Product() {
cout << "华为手机工厂生产了一部华为手机" << endl;
}
};
class MIFactory : public PhoneFactory {
public:
virtual void Product() {
cout << "小米手机工厂生产了一部小米手机" << endl;
}
};
3. 设计工厂类
工厂类的职责在于创建对应品牌手机的工厂类对象。
class Factory {
public:
static PhoneFactory* CreatePhoneFactory(PhoneType phone) {
PhoneFactory* phoneFactory = NULL;
switch(phone)
{
case PhoneType::iphone:
phoneFactory = new AppleFactory();
break;
case PhoneType::huawei:
phoneFactory = new huaweiFactory();
break;
case PhoneType::MI:
phoneFactory = new MIFactory();
break;
default:
phoneFactory = new PhoneFactory();
break;
}
return phoneFactory;
}
};
4. 测试结果
int main()
{
PhoneFactory* phoneFactory = Factory::CreatePhoneFactory(PhoneType::iphone);
phoneFactory->Product();
return 0;
}
控制台结果打印: