欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

装饰器模式,装饰模式

程序员文章站 2022-05-14 16:56:50
...

装饰器模式,装饰模式

装饰器模式

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();