1. 程式人生 > >php,java實現裝飾者模式

php,java實現裝飾者模式

當需要為現有的類增加新的功能,或則需要包裝現有類時,適合使用該模式

類圖:
這裡寫圖片描述

java實現
抽象產品類

public abstract class Subject {

    public abstract void doSomething();
}

產品類

public class ConcreteSubject extends Subject {

    @Override
    public void doSomething() {

    }
}

抽象裝飾者

public abstract class Decoration extends Subject
{
private Subject subject = null; public Decoration(Subject subject){ this.subject = subject; } @Override public void doSomething() { subject.doSomething(); } }

裝飾者

public class ConcreteDecoration extends Decoration {


    public ConcreteDecoration(Subject subject) {
        super
(subject); } private void decorationMethods(){ } @Override public void doSomething() { decorationMethods(); super.doSomething(); } }

php實現

abstract class Subject
{
    public abstract function doSomething();    
}

class ConcreteSubject extends Subject
{
public function doSomething() { echo 'doSomething'; } } abstract class Decortion extends Subject { private $subject; public function __construct(Subject $subject) { $this->subject = $subject; } public function doSomething() { $this->subject->doSomething(); } } class ConcreteDecortion extends Decortion { public function __construct(Subject $subject) { parent::__construct($subject); } public function decortionMethods() { echo 'decortionMethods'; } public function doSomething() { $this->decortionMethods(); parent::doSomething(); } } $decortion = new ConcreteDecortion(new ConcreteSubject()); $decortion->doSomething();