工厂模式:
由工厂类根据参数来决定创建出哪一种产品类的实例;
工厂类是指包含了一个专门用来创建其他对象的方法的类。所谓按需分配,传入参数进行选择,返回具体的类。工厂模式的最主要作用就是对象创建的封装、简化创建对象操作。
简单的说,就是调用工厂类的一个方法(传入参数)来得到需要的类;
代码实现:
示例1(最基本的工厂类):
<?php
class
public
public
return
}
}
class
public
//返回对象的实例
return
}
}
//调用工厂类MyFactory中的静态方法,获取类MyObject的实例
$myobject=MyFactory::factory();
echo
示例2:
<?php
//简单工厂模式
/1*
abstract
protected
protected
protected
public
$this->_NumberA
$this->_NumberB
}
public
$this->_NumberA
$this->_NumberB
}
/1*
protected
$this->_Result
}
*/
public
$this->_Result
}
//抽象方法无方法体
abstract
}
//继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;
//另外,这些方法的可见性
class
public
$this->_Result=$this->_NumberA
return
}
}
class
public
$this->_Result=$this->_NumberA
return
}
}
class
public
$this->_Result=$this->_NumberA
return
}
}
class
public
$this->_Result=$this->_NumberA
return
}
}
class
//创建保存实例的静态成员变量
private
//创建访问实例的公共的静态方法
public
switch($type){
case
self::$obj
break;
case
self::$obj
break;
case
self::$obj
break;
case
self::$obj
break;
}
return
}
}
//$obj
//$obj->setNumber(4,4);
$obj
echo
/1*
echo
$obj->clearResult();
echo
echo
*/
示例3:
<?php
//抽象工厂
//青铜会员的打折商品
class
//描述
public
}
//白银会员的打折商品
class
public
}
//青铜会员的推荐商品
class
public
}
//白银会员的推荐商品
class
public
}
//各个工厂的接口
interface
//生产对象的方法
public
}
//青铜工厂
class
//生产对象的方法
public
$productName
return
}
}
//白银工厂
class
//生产对象的方法
public
$productName
return
}
}
//调度中心
class
//获取工厂的方法
public
$factoryName
return
}
//获取工厂的静态方法
public
$factoryName
return
}
}
//实例化调度中心
$center
//获得一个白银工厂
$factory
//让白银工厂制造一个推荐商品
$product
//得到白银会员的推荐商品
echo
//获得一个青铜工厂
$factory2
//让青铜工厂制造一个打折商品
$product2
//得到青铜会员的推荐商品
echo
示例4:
<?php
//使用工厂类解析图像文件
interface
function
function
function
}
class
protected
public
$this->_file
$this->_parse();
}
private
//完成PNG格式的解析工作
//并填充$_width,$_height和$_data
$this->_data
list($this->_width,$this->_height)=$this->_data;
}
public
return
}
public
return
}
public
return
}
}
class
protected
public
$this->_file
$this->_parse();
}
private
//完成JPEG格式的解析工作
//并填充$_width,$_height和$_data
//$this->_width
//$this->_height
$this->_data
list($this->_width,$this->_height)=$this->_data;
}
public
return
}
public
return
}
public
return
}
}
//工厂类
class
public
$filename
switch(strtolower($filename['extension'])){
case
$return
break;
case
$return
break;
default:
echo
break;
}
if($return
return
}else{
echo
exit();
}
}
}
$image
var_dump($image->getWidth());
echo
print_r($image->getheight());
echo
print_r($image->getData());