PHP-设计模式详解(装饰器模式)

装饰器模式(Decorator)

介绍

结构型模式,为现有对象添加新的功能(装饰),比子类方式更加灵活。

何时使用:在不想增加很多子类的情况下扩展类。主类中新增加的内容只是在某些特殊的情况下才会执行,

优点:

  1. 改变原有代码的情况下对原有代码中的内容进行扩展,开放封闭原则;
  2. 每个装饰器完成自己的功能,单一职责。

缺点:

多层装饰比较复杂。

代码实现:

<?php
interface MessageTemplate{
        function message();
}

class OldMessageTemplate implements MessageTemplate{
        function message(){
                return 'old message!';
        }
}

abstract class DecoratorMessageTemplate implements MessageTemplate{
        public $template;
        function __construct($template){
                $this->template = $template;
        }
}

class NewDecoratorMessage extends DecoratorMessageTemplate{
        function message(){
                return str_replace('old','new',$this->template->message());
        }
}

class Message{
        function send($mt){
                echo $mt->message().'<br>';
        }
}

$message = new Message();
$oldtemplate = new OldMessageTemplate;
$message->send($oldtemplate);

$newtemplate = new NewDecoratorMessage($oldtemplate);
$message->send($newtemplate);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值