zoukankan      html  css  js  c++  java
  • PHP设计模式

    装饰器模式允许我们根据运行时不同的情景动态地为某个对象调用前后添加不同的行

    <?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();//输出:A加点酱油;
    echo '<br>--------<br>';
    $decoratorB->operation();//输出:A加点酱油;B加点辣椒;
    ?>
    
  • 相关阅读:
    http://www.jdon.com/jivejdon/thread/37340
    我的英语死在类似的问题上
    Linux之read命令使用
    SIP注册呼叫流程简介
    sh里的变量 $0 $1 $$ $#
    LTE 逻辑分层和接口协议
    LTE语音业务VOLTE
    shell编程——if语句 if z n f eq ne lt
    高通QXDM抓modem log
    LTE与VOLTE基础知识
  • 原文地址:https://www.cnblogs.com/taozi32/p/9226546.html
Copyright © 2011-2022 走看看