php设计模式之工厂模式
添加时间:2013-5-15 点击量:
工厂模式:由工厂类按照参数来决意创建出哪一种产片类的实例
工厂类:一个专门用来创建其他对象的办法类。即按需分派,传入参数进行选择,返回具体的类
感化:对象创建的封装、简化创建对象的操纵,即调用工厂类的一个办法来获得须要的类
补充:
1.首要角色:抽象产品(Product)、具体产品(Concrete Product)、抽象工厂角色(Creator)
2.优毛病
长处:工厂办法模式可以容许体系在不批改工厂角色的景象下引进心产品
毛病:客户可能仅仅为了创建一个特定的Concrete Product对象,就不得不创建一个Creator子类
3.实用性
当一个类不知道它所必须创建的对象的时辰
当一个类由它的子类来制订它所创建的对象的时辰
当一个类将创建对象的职责委托给多个帮助子类的某一个,并且你将哪一个帮助子类是这一信息局部化的时辰
<?php
//对象
class MyObject{
public function __construct(){}
public function test(){
return test;
}
}
//工厂
class MyFactory{
public static function factory(){
return new MyObject();
}
}
¥myObject = MyFactory::factory();
echo ¥myObject->test();
?>
<?php
//抽象类 定义属性及抽象办法
abstract class Operation{
protected ¥_NumberA = 0;
protected ¥_NumberB = 0;
protected ¥_Result= 0;
public function __construct(¥A,¥B){
¥this->_NumberA = ¥A;
¥this->_NumberB = ¥B;
}
public function setNumber(¥A,¥B){
¥this->_NumberA = ¥A;
¥this->_NumberB = ¥B;
}
public function clearResult(){
¥this->_Result = 0;
}
abstract protected function getResult();
}
//操纵类
class OperationAdd extends Operation{
public function getResult(){
¥this->_Result = ¥this->_NumbserA + ¥this->_NumberB;
return ¥this->_Result;
}
}
class OperationSub extends Operation{
public function getResult(){
¥this->_Result = ¥this->_NumberA - ¥this->_NumberB;
return ¥this->_Result;
}
}
…………
//工厂类
class OperationFactory{
private static ¥obj;
public static function CreationOperation(¥type,¥A,¥B){
switch(¥type){
case +:
self::¥obj = new OperationAdd(¥A,¥B);
break;
case -:
self::¥obj = new OperationSub(¥A,¥B);
break;
……
}
}
}
//操纵
¥obj = OperationFactory:: CreationOperation(+,5,6);
echo ¥obj-> getResult();
?>
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
工厂模式:由工厂类按照参数来决意创建出哪一种产片类的实例
工厂类:一个专门用来创建其他对象的办法类。即按需分派,传入参数进行选择,返回具体的类
感化:对象创建的封装、简化创建对象的操纵,即调用工厂类的一个办法来获得须要的类
补充:
1.首要角色:抽象产品(Product)、具体产品(Concrete Product)、抽象工厂角色(Creator)
2.优毛病
长处:工厂办法模式可以容许体系在不批改工厂角色的景象下引进心产品
毛病:客户可能仅仅为了创建一个特定的Concrete Product对象,就不得不创建一个Creator子类
3.实用性
当一个类不知道它所必须创建的对象的时辰
当一个类由它的子类来制订它所创建的对象的时辰
当一个类将创建对象的职责委托给多个帮助子类的某一个,并且你将哪一个帮助子类是这一信息局部化的时辰
<?php
//对象
class MyObject{
public function __construct(){}
public function test(){
return test;
}
}
//工厂
class MyFactory{
public static function factory(){
return new MyObject();
}
}
¥myObject = MyFactory::factory();
echo ¥myObject->test();
?>
<?php
//抽象类 定义属性及抽象办法
abstract class Operation{
protected ¥_NumberA = 0;
protected ¥_NumberB = 0;
protected ¥_Result= 0;
public function __construct(¥A,¥B){
¥this->_NumberA = ¥A;
¥this->_NumberB = ¥B;
}
public function setNumber(¥A,¥B){
¥this->_NumberA = ¥A;
¥this->_NumberB = ¥B;
}
public function clearResult(){
¥this->_Result = 0;
}
abstract protected function getResult();
}
//操纵类
class OperationAdd extends Operation{
public function getResult(){
¥this->_Result = ¥this->_NumbserA + ¥this->_NumberB;
return ¥this->_Result;
}
}
class OperationSub extends Operation{
public function getResult(){
¥this->_Result = ¥this->_NumberA - ¥this->_NumberB;
return ¥this->_Result;
}
}
…………
//工厂类
class OperationFactory{
private static ¥obj;
public static function CreationOperation(¥type,¥A,¥B){
switch(¥type){
case +:
self::¥obj = new OperationAdd(¥A,¥B);
break;
case -:
self::¥obj = new OperationSub(¥A,¥B);
break;
……
}
}
}
//操纵
¥obj = OperationFactory:: CreationOperation(+,5,6);
echo ¥obj-> getResult();
?>