• 装饰器模式


    装饰器模式

    <?php
    //装饰器模式-在不改变原有类的结构上,对类的功能那个作补充
    
    //武器基类
    abstract class Weapon{
        abstract public function descriptions();
        abstract public function cost();
    }
    
    //剑类
    class Glave extends Weapon{
        public function descriptions(){
            return 'Glave';
        }
        
        public function cost(){
            return "100";
        }
    }
    
    //匕首类
    class Knife extends Weapon{
        public function descriptions(){
            return __CLASS__;
        }
        public function cost(){
            return "80";
        }
    }
    
    //斧类
    class Axe extends Weapon{
        public function descriptions(){
            return  __CLASS__;
        }
        public function cost(){
            return "200";
        }
    }
    
    //属性类
    class Property extends Weapon{
        protected $_weapon = null;
        protected $_price = 0;
        protected $_descriptions = '';
        public function __construct(Weapon $weapon){
            $this->_weapon = $weapon;
        }
        public function cost(){
            return     $this->_weapon->cost() + $this->_price;
        }
        
        public function descriptions(){
            return $this->_weapon->descriptions().$this->_descriptions;
        }
    }
    
    //力量属性
    class Strength extends Property{
        protected $_price = 30;
        protected $_descriptions = '+ Strength';
    }
    
    //敏捷属性
    class Agility extends Property{
        protected $_price = 50;
        protected $_descriptions = '+ Agility';
    }
    
    //智力属性
    class Intellect extends Property{
        protected $_price = 20;
        protected $_descriptions = '+ Intellect';
    }
    
    $weapon = new Agility(new Strength(new Strength(new Glave())));
    echo $weapon->cost();
    echo $weapon->descriptions();
  • 相关阅读:
    复习事件委托
    模式学习⑧--观察者模式
    模式学习⑦ --中介者模式
    模式学习(六)--- 策略模式
    模式学习(五)--装饰者模式
    模式学习(四)-迭代器
    模式学习(三)- 工厂模式
    模式学习(二)
    linux rpm包解压
    linux patch中的p0和p1的区别
  • 原文地址:https://www.cnblogs.com/ikasa007/p/4425216.html
Copyright © 2020-2023  润新知