为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

3 回答

使用枚举,表格驱动的方法优化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();



1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信