码迷,mamicode.com
首页 > 其他好文 > 详细

11种常用设计模式之工厂模式

时间:2016-08-22 00:18:08      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

1)简单工厂模式(Simple Factory)

 

2)工厂方法模式(Factory Method)

 

3)抽象工厂模式(Abstract Factory)

 
 
简单工厂模式 Simple Factory

简单工厂模式又称静态工厂方法,它属于类创建模式。在简单工厂模式中,可以根据自变量的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。
 
简单工厂模式的角色
1.工厂类(Creator),工厂模式的核心,含有与应用业务逻辑处理的代码。
2.抽象产品(Abstract Product),被工厂创建实例的父类或拥有的共同接口。
3.具体产品(Concrete Product),任何被工厂创建的对象都是它的实例。
 
简单工厂的优点:
1.工厂类可以根据不同的参数创建不同的产品的实例,客户端可以免除直接创建产品。
2.创建产品实例的方法唯一,减少使用者的记忆。
3.通过配置文件,可以不修改任何客户端代码,即可实现更换和新增具体产品。
 
简单工厂的缺点:
1.由于工厂类集中了所有的产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
2.使用简单工厂模式,会增加类的数量,在一定程度上增加系统的复杂度。
3.简单工厂模式使用了静态的工厂方法,造成工厂角色无法形成基于继承的等级结构。
 
php示例代码:
 1 <?php
 2  
 3 $vehicle = Factory::create("plane");
 4 $vehicle->run();
 5  
 6  
 7 abstract class vehicle{
 8     abstract function run();
 9 }
10  
11 class Car extends vehicle{
12  
13     public function run(){
14         print("汽车在路上行驶");
15     }
16 }
17  
18 class Plane extends vehicle{
19  
20     public function run(){
21         print("飞机在天空翱翔");
22     }
23 }
24  
25 class Factory{
26  
27     public static function create($class){
28         $class = ucfirst($class);
29         $vehicle =  new $class();
30         return $vehicle;
31     }
32 }
 
简单工厂适用环境
1.工厂负责类比较少
2.客户端只知道传入参数,对于如何创建对象不关心
 
 
工厂方法Factory Method
 
简单的工厂模式一旦程序出现问题,整个系统都无法正常工作,为了降低风险和维护难度,对其重构,所以引入工厂方法。工厂方法为工厂类定义了接口,用多态来削弱工厂类的职能。
 
相比简单工厂多了一个抽象工厂角色,它是与应用程序无关的,任何在模式中创建对象的工厂类必须实现这个接口。
 
工厂方法优点:
相比简单工厂模式,用户关心的是对应的工厂,在添加新的产品时,无需修改抽象工厂和抽象产品提供的接口,只需要实现一个具体的工厂和具体产品就可以了。
工厂方法缺点:
1.在添加新的产品时,需要添加两个类。
2.增加系统抽象性和理解难度。
 
适用环境:
一个类不知道它所需要的对象类,一个类通过其子类来指定哪个对象,将创建对象的任务委托给多个工厂子类中的某个类。
 
PHP示例代码:
 1 <?php
 2 $factory = new CarFactory();
 3 $vehicle = $factory->create();
 4 $vehicle->run();
 5  
 6 abstract class vehicle{
 7     abstract function run();
 8 }
 9  
10 class Car extends vehicle{
11  
12     public function run(){
13         print("汽车在路上行驶");
14     }
15 }
16  
17 class Plane extends vehicle{
18  
19     public function run(){
20         print("飞机在天空翱翔");
21     }
22 }
23 abstract class Factory{
24     abstract function create();
25 }
26  
27 class CarFactory extends Factory{
28  
29     public function create(){
30         $vehicle =  new Car();
31         return $vehicle;
32     }
33 }
34  
35 class PlaneFactory extends Factory{
36  
37     public function create(){
38         $vehicle =  new Plane();
39         return $vehicle;
40     }
41 }

 

抽象工厂模式,下次再续。。。
 

11种常用设计模式之工厂模式

标签:

原文地址:http://www.cnblogs.com/helingfeng/p/5793877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!