设计模式之装饰模式

装饰模式

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

考虑这样一个问题:
要求给一个类添加新的方法让其产生新的功能。
通常情况下,我们会为这个类创建一个子类,在子类中添加你需要的新方法。

但现在我们将上述的问题增加一个限定条件:为了不增加这个类的复杂度,如何动态的给这个类添加新的功能。

这就需要用到装饰模式了。


interface Person{
    abstract void operation();
}

//待扩展对象
class ZhangSan implements Person{

    @Override
    public void operation() {
        System.out.println("吃");
    }
}
//待扩展对象
class LiSi implements Person{

    @Override
    public void operation() {
        System.out.println("吃");
    }
}
//创建一个抽象的装饰器让其继承待扩展对象
abstract class Decorator implements Person{

    protected Person person;

    public Decorator(Person person) {
        this.person = person;
    }
      
     //重写operation(),实际上调用的还是父类的方法
    public void operation() {
        person.operation();
    }
}

//创建装饰器的具体实现
class DecoratorImpl extends Decorator{
    public DecoratorImpl(Person person) {
        super(person);
    }
    //创建新的功能
    public void operation() {
        super.operation();
        System.out.println("喝");
    }
}
public class Client {
    public static void main(String[] args) {
        Person zhangsan = new ZhangSan();//待扩展对象
        Person lisi = new LiSi();
        DecoratorImpl d1 = new DecoratorImpl(zhangsan);//将待扩展对象传入装饰器
        DecoratorImpl d2 = new DecoratorImpl(lisi);
        d1.operation();
        d2.operation();
    }
}

装饰模式为类动态的添加更多的功能,它将扩展的功能放在单独的类中,这样可以简化原有的类,将原有类的核心职责和装饰功能区分开。

posted @ 2020-09-27 22:23  xxgbl  阅读(118)  评论(1)    收藏  举报