人生最大的错误是不断担心会犯错 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影

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个
  • 发布文章:1089篇
  • 用户评论:583条

最新回复

  • PHP程序员雷雪松: 非常详细的windows下MySQL的安装!!!
  • 嘿嘿: 高大上 嘿嘿
  • 嘿嘿: 呦西~~
  • memory: 实在是抱歉,我昨天找了一下我WIN电脑上的编译,发现当时编译完测...
  • kavid: 楼主发到我的邮箱呗 kavid@sina.com
  • 凯哥自媒体: 这个很不错,谢谢分享
  • memory: 在单位WINPC上,周一吧,我努力记着想死这事儿,到时候打包了发上来!
  • kavid: 楼主能把dll分享出来吗??正好我用的php 7.1php官方的...
  • zhaoliang0112: 厉害了,我哥的!!
  • zhaoliang0112: 希望能够有个系统的教程,就不要在去网上找了,直接这里学习!! :)
  • memory: 这是13年淘宝dba分享的一片文章,网上应该还有,我拿过来还没有...
  • wqintel: 而net.ipv4.tcp_mem则是配置tcp的内存大小,其单...
  • memory: 我这个站不是java写的哟~~~这是typecho开源博客程序改...
  • memory: 可以使用nginx反向代理后台的这个5000端口。
  • jarjar: 博主的java站好快啊
  • 凤凰山草民: java站这么快,厉害
  • 若铭: psdash可以部署到nginx上吗?
  • PHP程序员雷雪松: 很实用的PHP代码块!!!
  • codes: 把 .dll 发出来让我试试啊
  • 凯哥自媒体: 这个挺不错的