大话设计模式-装饰者模式

来源:互联网 发布:淘宝diy u盘 编辑:程序博客网 时间:2024/05/16 04:34
abstract class Component {public abstract function operation();}class ConcreteComponent extends Component {public function operation() {echo '具体对象的操作<br/>';}}abstract class Decorator extends Component {protected $component;public function setComponent(Component $component) {//设置Component$this->component = $component;}public function operation() {//重写Operation(),实际执行的是Component的Operation()if($this->component != null) {$this->component->operation();}}}class ConcreteDecoratorA extends Decorator {//本类的独有功能,区别于ConcreteDecoratorBprivate $addedState;public function operation() {//首先运行原Component的Operation(),再执行本类的功能,如 addState,相当于对原Component进行了装饰parent::operation();$this->addedState = 'New State';echo '具体装饰对象A的操作<br/>';}}class ConcreteDecoratorB extends Decorator {public function operation() {//首先运行原Component的Operation(),再执行本类的功能,如 AddedBehavior(),相当于对原Component进行了装饰parent::operation();$this->addedBehavior();echo '具体装饰对象B的操作<br/>';}//本类的独有方法,区别于ConcreteDecoratorprivate function addedBehavior() {}}//装饰的方法是:首先用ConcreteComponent实例化对象c,然后用ConcreteDecoratorA的实例化对象d1来包装c,在用ConcreteDecoratorB的对象d2包装d1,最终执行d2的Operation()$c = new ConCreteComponent();$d1 = new ConcreteDecoratorA();$d2 = new ConcreteDecoratorB();$d1->setComponent($c);$d2->setComPonent($d1);$d2->operation();

原创粉丝点击