工厂方法模式
- 工厂方法就是创建了很多的工厂用来生产不同的产品。
用一个例子来说明一下:
- // 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
- // 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,
- // 这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
- // -----------------------------------------------------------------
- // 定义了手机接口
- interface Mobile
- {
- public function name();
- }
- // 实现手机接口,具体的手机
- // 摩托罗拉的手机
- class MotorolaMobile implements Mobile
- {
- public function name()
- {
- echo "Motorola Mobile\n";
- }
- }
- // 诺基亚的手机
- class NokiaMobile implements Mobile
- {
- public function name()
- {
- echo "Nokia Mobile\n";
- }
- }
- // -----------------------------------------------------------------
- // 定义了工厂接口
- interface MobileFactory
- {
- public function product();
- }
- // 实现具体的手机工厂
- // 摩托罗拉的工厂
- class MotorolaFactory implements MobileFactory
- {
- public function product()
- {
- return new MotorolaMobile();
- }
- }
- // 诺基亚的工厂
- class NokiaFactory implements MobileFactory
- {
- public function product()
- {
- return new NokiaMobile();
- }
- }
- // -----------------------------------------------------------------
- // 不同的工厂生产不同的产品
- $MotorolaFactory = new MotorolaFactory();
- $mobile = $MotorolaFactory->product();
- $mobile->name();
- $NokiaFactory = new NokiaFactory();
- $mobile = $NokiaFactory->product();
- $mobile->name();
输出结果:
- Motorola Mobile
- Nokia Mobile
从上例可以看到,现在产品是由多个工厂生产,每个工厂生产的产品都不一样,但产品都含有共同的name方法。
对于工厂的product方法可以带上参数,也应用动态创建实例的方式来实现各品牌不同型号的手机的生产。
本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1032721,如需转载请自行联系原作者