php设计模式之工厂模式
2013-10-20 22:18
489 查看
一提到工厂,大家可能脑海里就是机器轰鸣轰鸣的声音,然后一件件的产品就生产出来了。那么软件设计中的工厂模式又是什么?跟现实中一样,只是工厂方法用来生成的对象,而不是产品。
为什么会出现工厂模式呢,在面向对象的设计中强调“抽象高于实现”,也就是说我们要尽量的一般化而不是特殊化,工厂方法模式解决了当代码关注于抽象类型时如何创建对象的实例问题。
假设某一制衣厂商能够生产一批T恤(T-shirt),我们可以定义如下代码:
那么如果我们需要得到T恤对象的话
//生产了一件白色的T恤
$tshirt = new Tshirt("white");
Ok,上面的代码为我们创建出了一件T恤,挺简单的是吧。但是,这时候主任说,我们不要生成白色的了,现在需要生产一批黄色的衬衫。那糟糕了,我们得改程序里面所有有关new Tshirt("white")的代码。怎么解决这样的问题呢,所有工厂方法产生了工厂类如下:
现在我们不管生成什么颜色的T恤只需要如下的代码调用, 生成什么颜色的T恤就与客户端隔离开来, 他只要调用工厂方法来生产就行。而工厂方法则去决定生产什么样的颜色。
为什么会出现工厂模式呢,在面向对象的设计中强调“抽象高于实现”,也就是说我们要尽量的一般化而不是特殊化,工厂方法模式解决了当代码关注于抽象类型时如何创建对象的实例问题。
假设某一制衣厂商能够生产一批T恤(T-shirt),我们可以定义如下代码:
<?php abstract class Clothes{ //颜色 private $color; public function getColor(){ return $this->color; } public function setColor($color){ $this->color = $color; } } //T恤类 class Tshirt extends Clothes{ public function __construct($color){ $this->setColor($color); } }
那么如果我们需要得到T恤对象的话
//生产了一件白色的T恤
$tshirt = new Tshirt("white");
Ok,上面的代码为我们创建出了一件T恤,挺简单的是吧。但是,这时候主任说,我们不要生成白色的了,现在需要生产一批黄色的衬衫。那糟糕了,我们得改程序里面所有有关new Tshirt("white")的代码。怎么解决这样的问题呢,所有工厂方法产生了工厂类如下:
class Factory{ //这里可以通过配置文件得到,为了简单,当作工厂方法的一个属性 public $color = "yellow"; //根据传递进来不同的参数决定实例化什么样的对象 public function produceClothes(){ return new Tshirt($this->color); } }
现在我们不管生成什么颜色的T恤只需要如下的代码调用, 生成什么颜色的T恤就与客户端隔离开来, 他只要调用工厂方法来生产就行。而工厂方法则去决定生产什么样的颜色。
$factory = new Factory(); $tshirt = $factory->produceClothes();
相关文章推荐
- PHP mysql 扩展库 操作mysql数据库步骤
- php查询子字符串位置代码
- 写一个函数,算出两个文件的相对路径?
- 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
- PHP学习笔记【13】_正则表达式
- 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹
- 安装php的apc
- php中文字符串翻转
- CI(5) session管理
- CI(4) 文件上传
- PHP mysql基本语句指令
- 安装pdo.so和pdo_mysql.so还有pcntl.so扩展到php中
- haskell 趣学指南笔记-1type and typeclass
- PHP练习【1】_上传文件
- 在本机用wamp和花生壳搭建php网页,其他人能访问
- zend 和 esftp插件开发大型PHP项目,ZEND最常用快捷键
- php常用正则表达式
- PHP - 2. 基础概念
- temp 3 : tpch
- temp2: tpch