失言就是一不小心说了实话 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影

PHP策略模式设计

前端设计,开发 memory发布于December 22, 2016 标签: PHP

抽象策略(Strategy)角色:定义所有支持的算法的公共接口。通常是以一个接口或抽象来实现。Context使用这个接口来调用其ConcreteStrategy定义的算法。

具体策略(ConcreteStrategy)角色:以Strategy接口实现某具体算法。

环境(Context)角色:持有一个Strategy类的引用,用一个ConcreteStrategy对象来配置

<?php
interface 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();

相关推荐

添加新评论

网站状态

  • 栏目分类:35个
  • 发布文章:1096篇
  • 用户评论:599条

最新回复

  • Bearox: 我也遇到了同样的问题,yum install dev86* 没用...
  • themebetter: 优化方法很不错。
  • 架构之路: 总结和nice,网站速度很快。
  • 架构之路: 总结的很好,简单、完整、高效。
  • memory: 我正在犹豫要不要更新了~~~ 因为1.2撇弃了php5.2,最低...
  • 灵九哲: medoo已经更新到v1.2了,博主更新下中文版网站内容
  • 灵九哲: medoo已经更新了v1.2,麻烦博主更新下中文版的网站,然后把...
  • memory: 用的typecho.
  • einsan: 涛哥,你的博客后端是自己开发的吗?还是使用哪一款开源产品?
  • yfly962464: 不行啊
  • memory: 哥们儿~非常不好意思,之前有段时间折腾jpress,后来就没有玩...
  • 夏日草博客: 记得很早的时候来过这个博客。
  • test1247: 好的,感谢。邮箱 121217605@qq.com
  • memory: 好的, 我回头找找呀。因为现在这个程序是php的,jpress的...
  • test1247: 这个jpress的主题能分享下吗
  • ryan: 瓦咔咔。。。。。。
  • PHP程序员雷雪松: 非常详细的windows下MySQL的安装!!!
  • 嘿嘿: 高大上 嘿嘿
  • 嘿嘿: 呦西~~
  • memory: 实在是抱歉,我昨天找了一下我WIN电脑上的编译,发现当时编译完测...