问答详情
源自:7-2 [php]策略模式的实现和使用

使用了策略模式并没有避免添加else{}代码啊

只是添加else{}的地方不一样,有什么区别吗?

提问者:nightlostk 2019-08-24 12:06

个回答

  • 慕粉19021142
    2020-11-05 12:15:11

    使用枚举,表格驱动的方法优化if...else...代码 粗糙写法如下,代码其实还可以优化
    class AdvertisingRoleEnum{
    
        const MALE   = 1;
        const FEMALE = 0;
    
        public static function getStrategy($gender){
            $listExplain[self::MALE]   = new \IMooc\MaleUserStrategy();
            $listExplain[self::FEMALE] = new \IMooc\FemaleUserStrategy();
            return $listExplain[$gender];
        }
    }
    
    class Page
    {
        protected $strategy;
    
        function index()
        {
            echo "AD:";
            $this->strategy->showAd();
            echo "<br/>";
    
            echo "Category:";
            $this->strategy->showCategory();
            echo "<br/>";
    
        }
    
        function setStrategy(\IMooc\UserStrategy $strategy){
            $this->strategy = $strategy;
        }
    
    }
    
    $page = new Page();
    $gender = isset($_GET['female'])??0;
    $strategy = AdvertisingRoleEnum::getStrategy($gender);
    //if (isset($_GET['female'])){
    //    $strategy = new  \IMooc\FemaleUserStrategy();
    //}else{
    //    $strategy = new MaleUserStrategy();
    //}
    $page->setStrategy($strategy);
    $page->index();



  • php蚂蚁
    2019-09-16 18:35:45

    主要是很方便切换上下文啊,利于控制,不然每次一改,都要从if else里面修改,除非是机器人,最重要的是解耦,代码可以独立调配使用。

  • qq_上上下下_03603925
    2019-09-02 15:53:01

    主要是降低耦合,个人觉得