<?php
/*
?* WEB开发笔记 www.chhua.com 每日练习 PHP设计模式构建类和对象方法(装饰模式)
?*组合模式是聚合组件,而装饰模式主要是用来改变组件的功能,“装饰”,“装饰”,主要是装饰对象。
?*
?*/

/*看代码演示
?* 假设:有一批部队开拓疆域,如果开拓到平原,然后在上面处理资源的开发获利和污染损失,并且部队自身能有计算财富总合的功能。
?*
?* */

abstract class title {//基类
?abstract function getCaifu();
}

class plains extends title {
?private $ziyuan=2;
?function getCaifu(){
??return $this->ziyuan;
?}
}

abstract class titlDecorator extends title {//装饰类,由于没有实现父类的getCaifu(),所以用抽象类
??? protected $title;//为了让子类能访问用的protected
??? function __construct(title $title){
??? ?$this->title=$title;
??? }?
}

class addCaifu extends titlDecorator{
?function getCaifu(){
??return $this->title->getCaifu()+2;//开发合理财富增加
?}
}

class jianCaifu extends titlDecorator{
?function getCaifu(){
??return $this->title->getCaifu()-4;//资源污染财富减少
?}
}

$title=new plains();//本身的财富值
echo $title->getCaifu();//输出 2

$title=new addCaifu(new plains());//开发合理
echo $title->getCaifu();//输出 4

$title=new jianCaifu(new addCaifu(new plains()));//资源污染之后
echo $title->getCaifu();//输出 0
?>