php,java實現裝飾者模式
阿新 • • 發佈:2019-02-02
當需要為現有的類增加新的功能,或則需要包裝現有類時,適合使用該模式
類圖:
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();