设计模式之装饰者模式

                                       工人

                             /                      

                         水管工                   木匠

                    /                             /          

         A公司水管工  B公司水管工  A公司木匠    B公司木匠

如上图所示,如果我们要实现AB公司的水管工和木匠,则要实现四个类。分别继承水管工和木匠的基类,如果需要在加个C公司呢,就显得特别繁琐,使用

装饰者模式可以很好的解决这一问题,各个文件的代码如下

1.Worker.java文件

interface Worker {

     public void doSomeWork();

}

2.Plumber .java文件

public class Plumber implements Worker{
    @Override
    public void doSomeWork() {
        System.out.println("修水管");
    }
}

3.Carpenter .java文件

public class Carpenter implements Worker{
    @Override
    public void doSomeWork() {
        System.out.println("修门窗");
    }
}

4.ACompany .java文件

public class ACompany implements Worker{
    private Worker worker;
    public ACompany(Worker worker) {
        this.worker = worker;
    }
    @Override
    public void doSomeWork() {
        System.out.println("你好");
        worker.doSomeWork();
    }
}

5.测试文件

public class Test {

    public static void main(String[] args) {
        Plumber worker = new Plumber();
        ACompany aWorker = new ACompany(worker);

        //A公司的水管工干活,其中aWorker 为装饰者,worker 为被装饰者
        aWorker.doSomeWork();
        Carpenter worker2 = new Carpenter();
        ACompany aWorker2 = new ACompany(worker2);

       //A公司的木匠工干活
        aWorker2.doSomeWork();
    }
}

原文地址:https://www.cnblogs.com/zhangkefan/p/4759098.html