简单工厂模式(Simple Factory) vs 工厂方法模式(Factory Method)
2012-06-04 21:20
387 查看
写在前面: 简单工厂模式和方法模式是设计模式中两种比较简单,同时也是比较常用的模式,本文的主要任务就是通过循序渐进的方法,从根本上掌握这两种设计模式。最后再通过对比两种模式的不同之处,更进一点加深对它们的掌握。
一.简单工厂模式(Simaple Factory)
![](http://my.csdn.net/uploads/201206/04/1338816556_4130.jpg)
在简单工厂模式中的各个角色:
Creator: 它的角色就是工厂,负责生产各种产品
Product: 它的角色是产品,是对所有产品的一个统称。在实现过程中,它是具体产品的公共基类。
ConcreteProduct: 它的角色是具体产品,它是每一种产品的具体实现。
下面附一个例子:Creator为CarFactory, Product为Car, ConcreteCar为BenzCar和BmwCar,因程序比较简单,这里不再做介绍。
#include <iostream>
#include <string>
using namespace std;
class Car
{
public:
virtual void Drive() const = 0;
};
class BenzCar : public Car
{
public:
void Drive() const
{
cout << "Drive Benz Car" << endl;
}
};
class BmwCar : public Car
{
public:
void Drive() const
{
cout << "Drive Bmw Car" << endl;
}
};
class CarFactory
{
public:
static Car * CreateCar(const string & strCarName)
{
if (strCarName == "Benz")
{
return new BenzCar();
}
else if (strCarName == "Bmw")
{
return new BmwCar();
}
else
{
cout << "Invalid Car" << endl;
return NULL;
}
}
static void DestroyCar(Car * pCar)
{
delete pCar;
}
};
int main()
{
Car * pCar = CarFactory::CreateCar("Benz");
if (NULL != pCar)
{
pCar->Drive();
}
CarFactory::DestroyCar(pCar);
}
二.工厂方法模式(Factory Method)
![](http://my.csdn.net/uploads/201206/04/1338816638_2058.jpg)
在工厂方法中的各个角色:
1.Creator: 工厂的统称,在具体的实现中,它是所有具体做事情的工厂的基类,它只做所有工厂都要做的共同的事情,其它的事情由各个具体的工厂去做。
2.ConcreteCreator:具体的工厂,具体负责生产某一类产品
3.Product:产品的统称,在具体的实现中,它是所有产品的基类,它实现所有产品都共有的特性。
4.ConcreteProduct: 具体的产品,它是用来实现某种产品的具体的类。
下面附上一个例子,Creator为CarFactory, ConcreteCreator为BenzFactory和BmwFactory, Product为Car, ConcreteProduct为BenzCar和BmwCar,因程序比较简单,这里不再做介绍。
#include <iostream>
using namespace std;
class Car
{
public:
virtual void Drive() const = 0;
};
class BenzCar : public Car
{
public:
void Drive() const
{
cout << "Drive Benz Car" << endl;
}
};
class BmwCar : public Car
{
public:
void Drive() const
{
cout << "Drive Bmw Car" << endl;
}
};
class CarFactory
{
public:
virtual Car * CreateCar() = 0;
virtual void DestroyCar(Car * pCar)
{
delete pCar;
}
};
class BenzFactory : public CarFactory
{
public:
Car * CreateCar()
{
return new BenzCar();
}
};
class BmwFactory : public CarFactory
{
Car * CreateCar()
{
return new BmwCar();
}
};
int main()
{
CarFactory * pCarFactory = new BenzFactory();
Car * pCar = pCarFactory->CreateCar();
pCar->Drive();
pCarFactory->DestroyCar(pCar);
delete pCarFactory;
}
三.简单工厂模式和工厂方法模式的对比:
1. 关于扩展:
简单工厂模式把变化集中到工厂中,每次新加一种品种,就要在工厂方法中做相应的修改;
工厂方法模式,每次新加一个产品,只需要在实现产品的同时,实现该产品对应的具体工厂。它的优点是扩展的时候,不需要修改以前代码,只需增加 新的代码。
2.关于使用:
简单工厂模式,每次要使用的时候,必需要知道事先约定好的,区别每个产品的标志符。
工厂方法模式,每次要生产某个产品时,必需要知道其所对应的具体工厂。
总的来说,我认为工厂方法模式的在扩展性方面略优于简单工厂模式,所以在这两个里面选的话,我优先会考虑工厂方法模式。尤其在系统比较复杂,要生产的产品比较多的时候,工厂方法模式的优点会更加突出。
原创文章,转载请注明出处:小武哥的博客
本文固定链接:http://www.wuzesheng.com/?p=209
一.简单工厂模式(Simaple Factory)
![](http://my.csdn.net/uploads/201206/04/1338816556_4130.jpg)
在简单工厂模式中的各个角色:
Creator: 它的角色就是工厂,负责生产各种产品
Product: 它的角色是产品,是对所有产品的一个统称。在实现过程中,它是具体产品的公共基类。
ConcreteProduct: 它的角色是具体产品,它是每一种产品的具体实现。
下面附一个例子:Creator为CarFactory, Product为Car, ConcreteCar为BenzCar和BmwCar,因程序比较简单,这里不再做介绍。
#include <iostream>
#include <string>
using namespace std;
class Car
{
public:
virtual void Drive() const = 0;
};
class BenzCar : public Car
{
public:
void Drive() const
{
cout << "Drive Benz Car" << endl;
}
};
class BmwCar : public Car
{
public:
void Drive() const
{
cout << "Drive Bmw Car" << endl;
}
};
class CarFactory
{
public:
static Car * CreateCar(const string & strCarName)
{
if (strCarName == "Benz")
{
return new BenzCar();
}
else if (strCarName == "Bmw")
{
return new BmwCar();
}
else
{
cout << "Invalid Car" << endl;
return NULL;
}
}
static void DestroyCar(Car * pCar)
{
delete pCar;
}
};
int main()
{
Car * pCar = CarFactory::CreateCar("Benz");
if (NULL != pCar)
{
pCar->Drive();
}
CarFactory::DestroyCar(pCar);
}
二.工厂方法模式(Factory Method)
![](http://my.csdn.net/uploads/201206/04/1338816638_2058.jpg)
在工厂方法中的各个角色:
1.Creator: 工厂的统称,在具体的实现中,它是所有具体做事情的工厂的基类,它只做所有工厂都要做的共同的事情,其它的事情由各个具体的工厂去做。
2.ConcreteCreator:具体的工厂,具体负责生产某一类产品
3.Product:产品的统称,在具体的实现中,它是所有产品的基类,它实现所有产品都共有的特性。
4.ConcreteProduct: 具体的产品,它是用来实现某种产品的具体的类。
下面附上一个例子,Creator为CarFactory, ConcreteCreator为BenzFactory和BmwFactory, Product为Car, ConcreteProduct为BenzCar和BmwCar,因程序比较简单,这里不再做介绍。
#include <iostream>
using namespace std;
class Car
{
public:
virtual void Drive() const = 0;
};
class BenzCar : public Car
{
public:
void Drive() const
{
cout << "Drive Benz Car" << endl;
}
};
class BmwCar : public Car
{
public:
void Drive() const
{
cout << "Drive Bmw Car" << endl;
}
};
class CarFactory
{
public:
virtual Car * CreateCar() = 0;
virtual void DestroyCar(Car * pCar)
{
delete pCar;
}
};
class BenzFactory : public CarFactory
{
public:
Car * CreateCar()
{
return new BenzCar();
}
};
class BmwFactory : public CarFactory
{
Car * CreateCar()
{
return new BmwCar();
}
};
int main()
{
CarFactory * pCarFactory = new BenzFactory();
Car * pCar = pCarFactory->CreateCar();
pCar->Drive();
pCarFactory->DestroyCar(pCar);
delete pCarFactory;
}
三.简单工厂模式和工厂方法模式的对比:
1. 关于扩展:
简单工厂模式把变化集中到工厂中,每次新加一种品种,就要在工厂方法中做相应的修改;
工厂方法模式,每次新加一个产品,只需要在实现产品的同时,实现该产品对应的具体工厂。它的优点是扩展的时候,不需要修改以前代码,只需增加 新的代码。
2.关于使用:
简单工厂模式,每次要使用的时候,必需要知道事先约定好的,区别每个产品的标志符。
工厂方法模式,每次要生产某个产品时,必需要知道其所对应的具体工厂。
总的来说,我认为工厂方法模式的在扩展性方面略优于简单工厂模式,所以在这两个里面选的话,我优先会考虑工厂方法模式。尤其在系统比较复杂,要生产的产品比较多的时候,工厂方法模式的优点会更加突出。
原创文章,转载请注明出处:小武哥的博客
本文固定链接:http://www.wuzesheng.com/?p=209
相关文章推荐
- 简单工厂模式(Simple Factory)和工厂方法模式(Factory Method)和AbstractFactory ( 抽象工厂 )
- 一、简单工厂模式(simple factory method)
- "Simple Factory" vs "Factory Method" vs "Abstract Factory" vs "Reflect"
- Simple Factory vs. Factory Method vs. Abstract Factory【简单工厂,工厂方法以及抽象工厂的比较】
- 简单工厂模式(Simple Factory Method Pattern)
- 简单工厂模式(Simple Factory Pattern(静态工厂方法模式)对象创建型模式)
- 简单工厂模式 (Simple Factory Pattern) / 静态工厂方法(Static Factory Method)模式
- Java 简单工厂模式(Simple Factory Pattern)又叫静态工厂方法模式(Static FactoryMethod Pattern)
- Simple Factory Vs Factory Method Vs Abstract Factory by Example
- 简单工厂模式(Simple Factory Pattern(静态工厂方法模式)对象创建型模式)
- 设计模式系列(四)简单工厂模式(Simple Factory Pattern/Static Factory Method)
- 简单工厂模式(SimpleFactoryPattern)对比工厂方法模式(FactoryMethodPattern)分析
- "Simple Factory" vs "Factory Method" vs "Abstract Factory" vs "Reflect"
- 设计模式之一---工厂方法模式【Factory Method模式】
- 创建型模式--工厂方法模式(Factory Method)
- 一、创建型模式:工厂方法模式(Factory Method)
- 工厂方法模式【Factory Method模式】
- .net 工厂方法模式(Factory Method)
- 【设计模式】Factory Method Pattern——工厂方法模式
- 工厂模式—简单工厂模式(Simple Factory Pattern)