设计模式10.1-模板方法

模版方法:在一个方法中定义一个算法的框架,
规定要执行哪些算法,以及算法执行的顺序。
并且将一些算法的实现延迟到子类中。

这样做的好处是可以在不改变算法结构的基础上,
自由地处理一些算法的实现。

在本示例中,RunMachineTemplateMethod的run方法,
定义了一个算法框架,其中把openPower和display的
实现延迟到了子类中。示例中的两个子类是RunComputer
和RunTv。
需要注意的是,run方法要加final修饰符,防止子类修改
框架结构。connectElectricity方法也是可以在子类中
重载的。对于一些算法结构有不同分支的代码可以考虑
在算法结构中使用钩子方法实现。

<?php

abstract class RunMachineTemplateMethod
{
    final public function run()
    {
        $this->connectElectricity();
        $this->openPower();
        $this->display();
    }

    public function connectElectricity()
    {
        echo "The Electricity is coming!<br>\n";
    }

    abstract public function openPower();

    abstract public function display();
}

class RunComputer extends RunMachineTemplateMethod
{
    public function openPower()
    {
        echo "Computer open power!<br>\n";
    }

    public function display()
    {
        echo "Computer display!<br>\n";
    }
}

class RunTv extends RunMachineTemplateMethod
{
    public function openPower()
    {
        echo "TV open power!<br>\n";
    }

    public function display()
    {
        echo "TV display!<br>\n";
    }
}


class Test
{
    public function run()
    {
        $computer = new RunComputer();
        $tv = new RunTv();

        $computer->run();
        echo "<hr>\n";
        $tv->run();
    }
}

$test = new Test();
$test->run();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值