工厂模式是个系列,分为简单工厂模式, 工厂方法模式, 抽象工厂模式,这三种模式也非常常用。这些模式最最经典的就例子就是设计计算器。
简单工厂模式
严格的说,简单工厂模式并不是23种常用的设计模式之一,它只算工厂模式的一个特殊实现。简单工厂模式在实际中的应用相对于其他2个工厂模式用的还是相对少得多,因为它只适应很多简单的情况,最最重要的是它违背了我们在概述中说的开放-封闭原则。因为每次你要新添加一个功能,都需要在生switch-case 语句(或者if-else 语句)中去修改代码,添加分支条件。
简单工厂模式角色分配:
Creator(产品创建者)
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
Product ( 产品抽象类)
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
Concrete Product (具体产品)
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
简单工厂模式uml图:
考虑下面一个事例: 加入你是一个商人,你做的的是手机生意。现在你生产android 手机和iphone等,考虑到以后你可能还会生产其他手机例如ubuntu手机。假定你选择了简单工厂模式来实现。那么显然,我们需要所有产品的抽象基类(Product) 即是Phone类:
class Phone
{
public:
virtual ~Phone(){};//在删除的时候防止内存泄露
virtual void call(string number) = 0;
};
然后我们需要具体的产品类 Concrete Product: AndroidPhone 和 IosPhone
class AndroidPhone : public Phone
{
public:
void call(string number){ cout<<"AndroidPhone is calling..."<<endl;}
};
class IosPhone : public Phone
{
public:
void call(string number) { cout<<"IosPhone is calling..."<<endl;}
};
最后我们需要Creator
class PhoneFactory
{
public:
Phone* createPhone(string phoneName)
{
if(phoneName == "AndroidPhone")
{
return new AndroidPhone();
}else if(phoneName == "IosPhone")
{
return new IosPhon