设计模式详解 PHP版
  • 设计模式简介&原则
  • 常见设计模式
    • 工厂模式(Factory)
      • 简单工厂模式(Simple Factory)
      • 工厂方法模式(Factory Method)
      • 抽象工厂模式(Abstract Factory)
      • 三种工厂模式对比
    • 单例模式(Singleton)
      • 场景*memcache操作类
    • 注册树模式
    • 适配器模式(Adapter)
    • 策略模式(Strategy)
    • 数据对象映射模式
    • 观察者模式(observer)
    • 原型模式(Prototype)
    • 装饰器模式(Decorator)
    • 迭代器模式 (Iteration)
    • 桥接模式(Bridge)
    • 建造者模式(Builder)
    • 命令行模式(Command)
    • 组合模式(Composite)
    • 外观模式(Facade)
    • 享元模式(Flyweight)
    • 解释器模式(Interpreter)
    • 中介者模式(Mediator)
    • 备忘录模式(Memento)
    • 代理模式(Proxy)
    • 责任链模式(Responsibility Chain)
    • 状态模式(State)
    • 模板方法模式(Template Method)
    • 访问者模式(Visitor)
  • 资料
Powered by GitBook
On this page
  • 概述:
  • 模式核心思想:
  • 模式架构简单代码实现示例:

Was this helpful?

  1. 常见设计模式

装饰器模式(Decorator)

概述:

模式核心思想:

  1. 装饰器模式(Eecorator),可以动态地添加修改类的功能

  2. 一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类集成它,并重新实现类的方法.

  3. 使用装饰器模式,进需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性

模式架构简单代码实现示例:

<?php
interface Component {
    public function operation();
}

abstract class Decorator implements Component{ // 装饰角色 
    protected  $_component;
    public function __construct(Component $component) {
        $this->_component = $component;
    }
    public function operation() {
        $this->_component->operation();
    }
}

class ConcreteDecoratorA extends Decorator { // 具体装饰类A
    public function __construct(Component $component) {
        parent::__construct($component);
    } 
    public function operation() {
        parent::operation();    //  调用装饰类的操作
        $this->addedOperationA();   //  新增加的操作
    }
    public function addedOperationA() {echo 'A加点酱油;';}
}
class ConcreteDecoratorB extends Decorator { // 具体装饰类B
    public function __construct(Component $component) {
        parent::__construct($component);
    } 
    public function operation() {
        parent::operation();
        $this->addedOperationB();
    }
    public function addedOperationB() {echo "B加点辣椒;";}
}

class ConcreteComponent implements Component{ //具体组件类
    public function operation() {} 
}

// clients
$component = new ConcreteComponent();
$decoratorA = new ConcreteDecoratorA($component);
$decoratorB = new ConcreteDecoratorB($decoratorA);
$decoratorA->operation();
echo '<br>--------<br>';
$decoratorB->operation();
Previous原型模式(Prototype)Next迭代器模式 (Iteration)

Last updated 6 years ago

Was this helpful?