PHP 模板方法模式使用

模板方法模式

用于各个子类均需实现类似的步骤,但是在这些步骤过程中,有各个子类不同的实现方法,也有他们公共的实现方法。

 示例代码:

//====================
//模板方法模式
//====================

/**
 * 抽象类(包含抽象模板)
 * Class Company
 */
abstract class Company{
    //步骤1  抽象方法(各个子类的实现不同)
    public abstract function Step1();

    //步骤2  非抽象方法(各个子类的实现相同,公共方法)
    public function Step2(){
        PrintStr('common step2');
    }

    //步骤3  抽象方法(各个子类的实现不同)
    public abstract function Step3();

    //《模板方法》 非抽象 用于组合上述子类方法,生成一个【模板】,让抽象操作推迟到子类实现!
    public function Active(){
        PrintStr('begin');
        $this->Step1();//实例方法调用方式
        $this->Step2();
        $this->Step3();
        PrintStr('end');
    }
}

/**
 * 子类实现类1
 * Class DHB
 */
class DHB extends Company{
    //实现抽象类中的抽象方法,抽象类中的非抽象方法已经实现。

    public function Step1() {
        PrintStr('DHB Step1');
    }

    public function Step3() {
        PrintStr('DHB Step3');
    }

}

/**
 * 子类实现类2
 * Class ZTE
 */
class ZTE extends Company{
    //实现抽象类中的抽象方法,抽象类中的非抽象方法已经实现。

    public function Step1() {
        PrintStr('ZTE Step1');
    }

    public function Step3() {
        PrintStr('ZTE Step3');
    }
}

function PrintStr($str){
    echo ">>>$str<br>";
}


//Client Call
$obj1=new DHB();
$obj1->Active();
PrintStr('=======');
$obj2=new ZTE();
$obj2->Active();

//Result
//>>>begin
//>>>DHB Step1
//>>>common step2
//>>>DHB Step3
//>>>end
//>>>=======
//>>>begin
//>>>ZTE Step1
//>>>common step2
//>>>ZTE Step3
//>>>end

 

转载于:https://www.cnblogs.com/dannywang/p/4369813.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值