zoukankan      html  css  js  c++  java
  • PHP设计模式之策略模式

    1.概念

    策略模式:将一组特定的行为和算法封装成类。以适应某些特定的上下文环境,这样的模式就是策略模式

    2.功能

    使用策略模式实现Ioc, 依赖倒置, 控制反转

    3.举例

    假如一个电商站点系统,针对不同的人群要跳转到不同的商品类目。而且全部广告位展示不同的广告

    4.要解决的问题

    1.不会由于上下文的改变而改变代码(传统都是使用 if else 来推断)
    2.假设新添加一种类型的用户,仅仅须要添加一种策略就好了,不须要在代码中 if else 里面在继续加入逻辑
    3.不同的地方仅仅须要运行不同的策略就好了,这样就可以解决这个问题
    4.从硬编码到解耦的使用
    5.最基本的是攻克了程序中的分支逻辑

    5.实战代码展示

    5.1 声明策略的接口文件

    interface UserStrategy {
        function showAd();
        function showCategory();
    } 

    5.2定义女性用户的策略

    class FemaleUserStrategy implements UserStrategy  {
    
        function showAd()
        {
            echo "2014新款女装";
        }
    
        function showCategory()
        {
            echo "服装";
        }
    } 

    5.3定义男性用户的策略

    class MaleUserStrategy implements UserStrategy  {
    
        function showAd()
        {
            echo "IPhone6";
        }
    
        function showCategory()
        {
            echo "电子产品";
        }
    } 

    6. 页面展示与使用

    class Page
    {
        //保存策略对象
        protected $strategy;
    
        //首页信息输出
        function index(){
            //传统写法,与输出
            if (isset($_GET['famale'])) {
                echo '女性';
            }else if (isset($_GET['famale'])) {
                echo '男性';
            }
            //假设新增了业务逻辑后面会非常多的  if  else
    
    
            //策略模式的输出
            echo $this->strategy->showAd();
            echo '<br>';
            echo $this->strategy->showCategory();
        }
    
        //策略模式来解决,注冊策略
        function setStrategy(UserStrategy $strategy){
            $this->strategy = $strategy;
        }
    }
    
    
    //运行
    $page = new Page;
    //这里依据实际上下文的环境
    if (isset($_GET['famale'])) {
        $strategy = new FemaleUserStrategy();
    }else if (isset($_GET['male'])) {
        $strategy = new MaleUserStrategy();
    }
    //使依赖关系反转,终于运行在使用关系绑定,输出结果(攻克了传统写法的耦合问题)
    $page->setStrategy($strategy);
    $page->index();
  • 相关阅读:
    20175310 《Java程序设计》第3周学习总结
    IDEA学生免费申请教程
    20175310 《Java程序设计》第2周学习总结
    在虚拟机中使用中文输入法
    VMware虚拟机将英文改成中文的方法
    20175310 《Java程序设计》第1周学习总结(1)安装虚拟机
    20175310 《Java程序设计》第1周学习总结(2)
    Java 开源 CMS :magnolia
    开源网络监控管理系统:OpenNMS
    开源摄影机:Axiom Camera
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7219502.html
Copyright © 2011-2022 走看看