装饰器模式

装饰器模式

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

 

你可能感兴趣的:(装饰器模式)