标签:
工人
/ \
水管工 木匠
/ \ / \
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();
}
}
标签:
原文地址:http://www.cnblogs.com/zhangkefan/p/4759098.html