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加点辣椒;
    ?>
    
  • 相关阅读:
    程序猿也爱学英语(上),有图有真相
    时间&物质&效率
    20130722
    Java数组操作工具
    小学课文《挑山工》
    字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)
    String[]转化暴露“思维误区”
    2017.9.17 小测试小整理
    Noip2016 提高组 Day1
    luogu P2585 [ZJOI2006]三色二叉树
  • 原文地址:https://www.cnblogs.com/taozi32/p/9226546.html
Copyright © 2011-2022 走看看