模板模式 php,php设计模式(十八)模板方法模式

组合型的设计模式本质是使用组合替代继承;

但是继承并非一无是处;

只是因为大家容易滥用继承造成强耦合;

作为面向对象编程的三大特性之一;

继承还是很有价值的;

比如说本篇文章要讲的模板方法模式;

就是依赖于继承来实现;

结构

抽象类: 定义操作中骨架;比如说执行顺序等;讲具体的执行内容延迟到子类;

子类: 定义具体的执行内容;

示例

Phone.php<?php

namespace Baijunyao\DesignPatterns\Template;

/**

* Class Phone

*

* @package Baijunyao\DesignPatterns\Template

*/

abstract class Phone

{

/**

* 定义操作顺序

*/

final public function action()

{

$this->powerOn();

$this->showLogo();

$this->callUp();

}

/**

* 开机

*/

protected function powerOn()

{

echo '开机' . '
';

}

/**

* logo

*

* @return mixed

*/

abstract protected function showLogo();

/**

* 打电话

*/

protected function callUp()

{

echo '打电话' . '
';

}

}

Xiaomi.php<?php

namespace Baijunyao\DesignPatterns\Template;

/**

* Class Xiaomi

*

* @package Baijunyao\DesignPatterns\Template

*/

class Xiaomi extends Phone

{

/**

* logo

*

* @return mixed|void

*/

protected function showLogo()

{

echo '小米logo'. '
';

}

}

Huawei.php<?php

namespace Baijunyao\DesignPatterns\Template;

/**

* Class Huawei

*

* @package Baijunyao\DesignPatterns\Template

*/

class Huawei extends Phone

{

/**

* 打电话

*

* @return mixed|void

*/

protected function showLogo()

{

echo '华为logo'. '
';

}

}

运行;

index.php<?php

namespace Baijunyao\DesignPatterns\Template;

require __DIR__.'/../vendor/autoload.php';

/**

* 客户端

*

* Class Client

* @package Baijunyao\DesignPatterns\Template

*/

class Client

{

/**

* 运行

*/

public function run()

{

$xiaomi = new Xiaomi();

$xiaomi->action();

echo '


';

$huawei = new Huawei();

$huawei->action();

}

}

$client = new Client();

$client->run();

3ea43baef3f948dde9147eee52fa4b71.png

从代码中我们可以看出;

在抽象类中使用了 final 这是模板方法标志性的关键字;

它决定了执行的顺序等行为只能由父级抽象类决定;

而子类只需要完成具体的操作内容;

17d9c60270b69f48b57dd1ff704b2da6.png

github示例:https://github.com/baijunyao/design-patterns/tree/master/Template

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值