注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Copper peas ' Bolg

Keep On Moving...This Is My Life...

 
 
 

日志

 
 

【原】 PHP 设计模式一之(简单)工厂模式  

2011-06-01 00:14:10|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

边学习理论边实践才是真!

工厂模式: 简单工厂模式 工厂方法模式  抽象工厂模式

后面我会一一写出,并分析他们区别,优缺

下面是学习后模拟写的代码

<?php

/**
 * 计算器 OOP开发 练习  简单的工厂模式
 * 目前运算符号暂定为:加减乘除,以后会扩展平方等
 * 定义:经过一定的逻辑,需要实例对应的对象[对象可以完全不同],经常配合策略模式使用[这里的对象有相似性]
 * @author Chen Wei Han <csq-3@163.com>
 * @copyright Copyright &copy; 2011 Chen Wei Han
 * @link http://csq-3.blog.163.com
 * @version $Id: Calculator.php 1 2011-05-31
 * @since 1.0
 * @package OOP
 * @example 
 *
 */


/**
 * 运算符抽象类
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package OOP
 */
abstract class Abstract_Operation{
 
 /**
  * 定义私有变量
  *
  * @var $numa
  */
 private $numa;
 
 /**
  * 定义私有变量
  *
  * @var $numb
  */
 private $numb;
 
 public function Getnuma(){
  return $this->numa;
 }
 
    public function Setnuma($num){ 
  $this->numa=$num;
 }
 
    public function Getnumb(){
  return $this->numb;
 }
 
    public function Setnumb($num){ 
  $this->numb=$num;
 }

 /**
  * 抽象方法GetResult 返回结果
  */
 abstract protected function GetResult();
}

/**
 *  加法子类
 * 
 *  @author Chen Wei Han <csq-3@163.com>
 *  @package OOP
 */
class OperationAdd extends Abstract_Operation
{
 public function GetResult()
 {
  $result = $this->Getnuma() + $this->Getnumb();
  return $result;
 }
}

/**
 *  减法子类
 * 
 *  @author Chen Wei Han <csq-3@163.com>
 *  @package OOP
 */
class OperationSub extends Abstract_Operation
{
 public function GetResult()
 {
  $result = $this->Getnuma() - $this->Getnumb();
  return $result;
 }
}

/**
 *  乘法子类
 * 
 *  @author Chen Wei Han <csq-3@163.com>
 *  @package OOP
 */
class OperationMul extends Abstract_Operation
{
 public function GetResult()
 {
  $result = $this->Getnuma() * $this->Getnumb();
  return $result;
 }
}

/**
 *  除法子类
 * 
 *  @author Chen Wei Han <csq-3@163.com>
 *  @package OOP
 */
class OperationDiv extends Abstract_Operation
{
 public function GetResult()
 {
  $result = $this->Getnuma() / $this->Getnumb();
  return $result;
 }
}

/**
 * 运算符工厂类
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package OOP
 */
class OperationFactory
{
 /**
  * 构建运算符对象方法
  *
  * @param $operation
  * @return class $oper
  */
 public static function GreateOperation($operation)
 {
  switch ($operation)
  {
   case 1:
     $oper = new OperationAdd();
   break;
   case 2:
     $oper = new OperationSub();
   break;
   case 3:
     $oper = new OperationMul();
   break;
   case 4:
     $oper = new OperationDiv();
   break;
   default:
    echo "err!";
    die();
   break;
  }
  return $oper;
 }
}

/**
 * 运算主函数
 *
 * @param  int $firstnum
 * @param  int $secondnum
 * @param  int $operation
 * @return int $oper->GetResult();
 * @package OOP
 */
function Calculate($firstnum,$secondnum,$operation)
{
 //静态调用
 $oper = OperationFactory::GreateOperation($operation);
 $oper->Setnuma($firstnum);
 $oper->Setnumb($secondnum);
 $oper->GetResult();
 return $oper->GetResult();
}

/**
 * 获取参数
 */
$firstnum  = intval($_POST['firstnum']);
$secondnum = intval($_POST['secondnum']);
$operation = trim($_POST['operation']);
echo "计算结果:".Calculate($firstnum,$secondnum,$operation);

 

?>

 

静态

<body>
<form name="Calculator" id="postform" action="Calculator.php" method="POST">
 <div>请输入第一个参数:<input name="firstnum"  type="text"></input></div>
 <div>选择运算符 <select name="operation">
              <option value="">请选择</option>
        <option value="1">加</option>
           <option value="2">减</option>
     <option value="3">乘</option>
     <option value="4">除</option>
                    </select></div>
 <div>请输入第二个参数:<input name="secondnum" type="text"></input></div>
 <div><input name="submit" type="submit" value="提交"></input></div>
<form> 
</body>

  评论这张
 
阅读(134)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018