时间:2021-05-26
抽象策略(Strategy)角色:定义所有支持的算法的公共接口。通常是以一个接口或抽象来实现。Context使用这个接口来调用其ConcreteStrategy定义的算法。
具体策略(ConcreteStrategy)角色:以Strategy接口实现某具体算法。
环境(Context)角色:持有一个Strategy类的引用,用一个ConcreteStrategy对象来配置
核心代码
<?phpinterface Strategy { // 抽象策略角色,以接口实现 public function algorithmInterface(); // 算法接口}class ConcreteStrategyA implements Strategy { // 具体策略角色A public function algorithmInterface() {}}class ConcreteStrategyB implements Strategy { // 具体策略角色B public function algorithmInterface() {}}class ConcreteStrategyC implements Strategy { // 具体策略角色C public function algorithmInterface() {}}class Context { // 环境角色 private $_strategy; public function __construct(Strategy $strategy) { $this->_strategy = $strategy; } public function contextInterface() { $this->_strategy->algorithmInterface(); }}// client$strategyA = new ConcreteStrategyA();$context = new Context($strategyA);$context->contextInterface();$strategyB = new ConcreteStrategyB();$context = new Context($strategyB);$context->contextInterface();$strategyC = new ConcreteStrategyC();$context = new Context($strategyC);$context->contextInterface();其他代码
<?php /** * 策略模式(Strategy.php) * * 定义一系列算法,把它们一个个封装起来,并且使它们可相互替换,使用得算法的变化可独立于使用它的客户 * */ // ---以下是一系列算法的封闭---- interface CacheTable { public function get($key); public function set($key,$value); public function del($key); } // 不使用缓存 class NoCache implements CacheTable { public function __construct(){ echo "Use NoCache<br/>"; } public function get($key) { return false; } public function set($key,$value) { return true; } public function del($key) { return false; } } // 文件缓存 class FileCache implements CacheTable { public function __construct() { echo "Use FileCache<br/>"; // 文件缓存构造函数 } public function get($key) { // 文件缓存的get方法实现 } public function set($key,$value) { // 文件缓存的set方法实现 } public function del($key) { // 文件缓存的del方法实现 } } // TTServer class TTCache implements CacheTable { public function __construct() { echo "Use TTCache<br/>"; // TTServer缓存构造函数 } public function get($key) { // TTServer缓存的get方法实现 } public function set($key,$value) { // TTServer缓存的set方法实现 } public function del($key) { // TTServer缓存的del方法实现 } } // -- 以下是使用不用缓存的策略 ------ class Model { private $_cache; public function __construct() { $this->_cache = new NoCache(); } public function setCache($cache) { $this->_cache = $cache; } } class UserModel extends Model { } class PorductModel extends Model { public function __construct() { $this->_cache = new TTCache(); } } // -- 实例一下 --- $mdlUser = new UserModel(); $mdlProduct = new PorductModel(); $mdlProduct->setCache(new FileCache()); // 改变缓存策略 ?>具体的大家可以多关注一下以前发布的文章
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP设计模式之策略模式(Strategy)入门与应用。分享给大家供大家参考,具体如下:这个策略模式,意思就是定义一系列算法,把它们一个个封装起来
本文实例讲述了PHP设计模式之策略模式原理与用法。分享给大家供大家参考,具体如下:策略模式(StrategyPattern)策略模式是对象的行为模式,用意是对一
策略模式(Strategy):它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。策略模式和T
策略模式将不同算法的逻辑抽象接口封装到一个类中,通过组合和多态结合的方式来进行不同算法具体的实现。作用策略模式是一种定义一系列算法的方法,Strategy类层次
本文实例讲述了php策略模式。分享给大家供大家参考,具体如下:策略模式和工厂模式很像。工厂模式:着眼于得到对象,并操作对象。策略模式:着重得到对象某方法的运行结