21
2020
10

什么是装饰器模式?

答:装饰器模式是指动态地给一个对象增加一些额外的功能,同时又不改变其结构。


优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。


装饰器模式的关键:装饰器中使用了被装饰的对象。


比如,创建一个对象“laowang”,给对象添加不同的装饰,穿上夹克、戴上帽子......,这个执行过程就是装饰者模式,实现代码如下。


1)定义顶层对象,定义行为


interface IPerson {

    void show();

}


2)定义装饰器超类


class DecoratorBase implements IPerson{

    IPerson iPerson;

    public DecoratorBase(IPerson iPerson){

        this.iPerson = iPerson;

    }

    @Override

    public void show() {

        iPerson.show();

    }

}


3)定义具体装饰器


class Jacket extends DecoratorBase {

    public Jacket(IPerson iPerson) {

        super(iPerson);

    }

    @Override

    public void show() {

        // 执行已有功能

        iPerson.show();

        // 定义新行为

        System.out.println("穿上夹克");

    }

}

class Hat extends DecoratorBase {

    public Hat(IPerson iPerson) {

        super(iPerson);

    }

    @Override

    public void show() {

        // 执行已有功能

        iPerson.show();

        // 定义新行为

        System.out.println("戴上帽子");

    }

}


4)定义具体对象


class LaoWang implements IPerson{

    @Override

    public void show() {

        System.out.println("什么都没穿");

    }

}


5)装饰器模式调用


public class DecoratorTest {

    public static void main(String[] args) {

        LaoWang laoWang = new LaoWang();

        Jacket jacket = new Jacket(laoWang);

        Hat hat = new Hat(jacket);

        hat.show();

    }

}



« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。