简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
创建一个简单工厂类,简单工厂类创建具体产品的实例。
实现一个计算机控制台程序,要求输入两个数和预算符号,得到结果。(来之《大话设计模式》)
按照需求,可以将运算操作设计成为一个抽象类,加法操作,减法操作,乘法操作,除法操作都继承这个抽象类。然后设计一个工厂类,去创建具体的实例。
http://download.csdn.net/detail/clevercode/8695611
1)抽象产品(Product)角色:运算抽象类(Operation)。
// 运算抽象类
class Operation{
// 数字A
protected $_numberA = null;
// 数字B
protected $_numberB = null;
/**
* 设置成员A
*
* @param double $num 数字
* @return void
*/
public function setNumberA($num){
$this->_numberA = $num;
}
/**
* 获取成员A
*
* @return double 数字
*/
public function getNumberA(){
return $this->_numberA;
}
/**
* 设置成员B
*
* @param double $num 数字
* @return void
*/
public function setNumberB($num){
$this->_numberB = $num;
}
/**
* 获取成员B
*
* @return double 数字
*/
public function getNumberB(){
return $this->_numberA;
}
/**
* 获取运算结果
*
* @return double 数字
*/
public function getResult(){
return null;
}
}
2)具体产品(Concrete Product)角色:加法运算(OperationAdd),减法运算(OperationSub),乘法运算(OperationMul),除法运算(OperationDiv)。
// 加法类
class OperationAdd extends Operation{
/**
* 获取运算结果
*
* @return double 数字
*/
public function getResult(){
return $this->_numberA + $this->_numberB;
}
}
// 减法类
class OperationSub extends Operation{
/**
* 获取运算结果
*
* @return double 数字
*/
public function getResult(){
return $this->_numberA - $this->_numberB;
}
}
// 乘法类
class OperationMul extends Operation{
/**
* 获取运算结果
*
* @return double 数字
*/
public function getResult(){
return $this->_numberA * $this->_numberB;
}
}
// 除法类
class OperationDiv extends Operation{
/**
* 获取运算结果
*
* @return double 数字
*/
public function getResult(){
if ($this->_numberB == 0) {
return null;
}
return $this->_numberA / $this->_numberB;
}
}
3)工厂(Creator)角色:工厂类(OperationFactory)。
setNumberA(5);
// 设置数字B
$operObject->setNumberB(2);
// 运算
echo $operObject->getResult();
}
}
// 程序入口
function start(){
// 调用客户端主函数
$client = new Client();
$client->main();
}
start();
?>
每当需要添加或者删除实例时候,都需要修改工厂。然而一旦工厂出了问题,所有的实例都不能够使用。
版权声明:
1)原创作品,出自"CleverCode的博客",转载时请务必注明以下原创地址,否则追究版权法律责任。
2)原创地址:http://blog.csdn.net/clevercode/article/details/45692995(转载务必注明该地址)。
3)设计模式之PHP项目应用(23种设计模式目录):http://blog.csdn.net/clevercode/article/details/45741843(目录持续更新,关注请收藏)。
4)博客专栏地址(设计模式之PHP项目应用):http://blog.csdn.net/column/details/phpusedesignpattern.html(博客持续增加,关注请收藏)。
5)欢迎大家关注我博客更多的精彩内容:http://blog.csdn.net/CleverCode。