一、讲解
自百度百科:http://baike.baidu.com/view/1306799.htm
工厂模式定义:实例化对象,用工厂方法代替new操作.
首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。
使用工厂方法 要注意三个角色,首先你要定义产品接口类,如上面的Sample,产品接口下有Sample接口的实现类,如SampleA,其次要有一个factory类,用来生成产品Sample。
由此可见,工厂方法确实为系统结构提供了非常灵活强大的动态扩展机制,只要我们更换一下具体的工厂方法,系统其他地方无需一点变换,就有可能将系统功能进行改头换面的变化。
PHP例子:
<?php
interface abstracted{
public function realCreate();
}
//女人类
class Woman{
public function action(){
echo '这是女人';
}
}
//男人类
class Man{
public function action(){
echo '这是男人';
}
}
//创建女人
class WomanCreator implements abstracted {
public $chromosome;//染色体
public function realCreate(){
if ($this->chromosome == "xx") {
return new Woman();
}
}
}
//创建男人
class ManCreator implements abstracted {
public $chromosome;
public function realCreate(){
if ($this->chromosome == "xy" || $this->chromosome == "xyy") {
return new Man();
}
}
}
//人类工厂
class PersonFactory{
public function create($what){
$create = $what."Creator";
return $create = new $create();
}
}
$create = new PersonFactory();
$instance = $create->create('Woman');
$instance->chromosome = "xx";
$instance->realCreate()->action();
?>
二、分类
另外,参考‘珍山钙茶’的博客:http://www.cnblogs.com/poissonnotes/archive/2010/12/01/1893871.html
二、简介
工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类:
1. 简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况:
1.在编码时不能预见需要创建哪种类的实例。
2.系统不应依赖于产品类实例如何被创建、组合和表达的细节
三 其他常见的设计模式
https://www.ibm.com/developerworks/cn/opensource/os-php-designptrns/
工厂模式、单元素模式、观察者模式、命令链模式、策略模式 等