PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
2010-11-24 17:42
1176 查看
观察者模式
策略模式
简单工厂模式
/** * 定义观察接口 */ interface Subject { public function Attach($Observer); //添加观察者 public function Detach($Observer); //踢出观察者 public function Notify(); //满足条件时通知观察者 public function SubjectState($Subject); //观察条件 } /** * 观察类的具体实现 */ class Boss Implements Subject { public $_action; private $_Observer; public function Attach($Observer) { $this->_Observer[] = $Observer; } public function Detach($Observer) { $ObserverKey = array_search($Observer, $this->_Observer); if($ObserverKey !== false) { unset($this->_Observer[$ObserverKey]); } } public function Notify() { foreach($this->_Observer as $value ) { $value->Update(); } } public function SubjectState($Subject) { $this->_action = $Subject; } } /** * 抽象观察者 * */ abstract class Observer { protected $_UserName; protected $_Sub; public function __construct($Name,$Sub) { $this->_UserName = $Name; $this->_Sub = $Sub; } public abstract function Update(); //接收通过方法 } /** * 观察者 */ class StockObserver extends Observer { public function __construct($name,$sub) { parent::__construct($name,$sub); } public function Update() { echo $this->_Sub->_action.$this->_UserName." 你赶快跑..."; } } $huhansan = new Boss(); //被观察者 $gongshil = new StockObserver("三毛",$huhansan); //初始化观察者 $huhansan->Attach($gongshil); //添加一个观察者 $huhansan->Attach($gongshil); //添加一个相同的观察者 $huhansan->Detach($gongshil); //踢出基中一个观察者 $huhansan->SubjectState("警察来了"); //达到满足的条件 $huhansan->Notify(); //通过所有有效的观察者
策略模式
/** * 定义支持算法的接口 * */ abstract class Strategy { abstract public function AlgorithmInterface(); } class ConcreateStratA extends Strategy { public function AlgorithmInterface() { echo "算法A"; } } class ConcreateStratB extends Strategy { public function AlgorithmInterface() { echo "算法B"; } } class ConcreateStratC extends Strategy { public function AlgorithmInterface() { echo "算法C"; } } class Context { private $_StrObj; public function __construct($strobj) { $this->_StrObj = $strobj; } public function ContextInterface() { $this->_StrObj->AlgorithmInterface(); } } $context = new Context(new ConcreateStratA); $context->ContextInterface(); $context = new Context(new ConcreateStratC); $context->ContextInterface(); $context = new Context(new ConcreateStratB); $context->ContextInterface();
简单工厂模式
/** * 定义运算类 * */ abstract class Operation { //存储第一个数字 protected $_NumberA = 0; //存储第二个数字 protected $_NumberB = 0; //存储运算结果 protected $_Result = 0; public function __construct() { //empty } /** * 设定需要运行的二个数字 * * @param 第一个数字 $A * @param 第二个数字 $B */ public function SetNumber($A=0,$B=0) { $this->_NumberA = $A; $this->_NumberB = $B; } /** * 清除所有数据 * */ protected function ClearResult() { $this->_Result = 0; } abstract function GetResult(); } /** * 数据相加 */ class OperactionAdd extends Operation { public function GetResult() { $this->_Result = $this->_NumberA + $this->_NumberB; return $this->_Result; } } /** * 数据相减 */ class OperactionSub extends Operation { public function GetResult() { $this->_Result = $this->_NumberA - $this->_NumberB; return $this->_Result; } } /** * 数据相乘 */ class OperactionMul extends Operation { public function GetResult() { $this->_Result = $this->_NumberA * $this->_NumberB; return $this->_Result; } } /** * 数据相除 */ class OperactionDiv extends Operation { public function GetResult() { $this->_Result = $this->_NumberA / $this->_NumberB; return $this->_Result; } } class OperactionFactory { private static $_Obj; public static function CreateOperaction($type) { switch($type) { case "+": self::$_Obj = new OperactionAdd; break; case "-": self::$_Obj = new OperactionSub; break; case "*": self::$_Obj = new OperactionMul; break; case "/": self::$_Obj = new OperactionDiv; break; } return self::$_Obj; } } $Obj = OperactionFactory::CreateOperaction("*"); $Obj->SetNumber(6,4); $num = $Obj->GetResult(); var_dump($num);
相关文章推荐
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- PHP设计模式之观察者模式(Observer)详细介绍和代码实例
- php设计模式--单例,工厂,观察者,策略模式
- PHP设计模式之观察者模式(Observer)详细介绍和代码实例
- PHP设计模式之观察者模式实例
- PHP设计模式之观察者模式(Observer)详细介绍和代码实例
- PHP设计模式之观察者模式实例
- 设计模式php实例:策略模式
- PHP设计模式之适配器模式代码实例
- C++设计模式之简单工厂模式实例
- JAVA设计模式-策略模式应用实例
- PHP 观察者设计模式测试代码笔记
- php设计模式 Observer(观察者模式)
- JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
- 设计模式之PHP项目应用——策略模式设计商场收银系统
- 设计模式之PHP项目应用——策略模式设计自动驾驶系统
- PHP设计模式系列 - 观察者模式
- 设计模式---策略模式和观察者模式