public interface ZhuA {
void operation();
}
public class ZhuAimpl implements ZhuA{
@Override
public void operation() {
System.out.println("开始清理墙面!");
}
}
public abstract class ZhuB implements ZhuA {
private ZhuA a;
public ZhuB(ZhuA a){
this.a=a;
}
public void operation(){
a.operation();
decoration();
}
public abstract void decoration();
}
public class ZhuBimpl1 extends ZhuB{
public ZhuBimpl1(ZhuA a) {
super(a);
}
@Override
public void decoration() {
System.out.println("开始刮腻子");
}
}
public class ZhuBimpl2 extends ZhuB{
public ZhuBimpl2(ZhuA a) {
super(a);
}
@Override
public void decoration() {
System.out.println("开始涂油漆");
}
}
public class ZhuBimpl3 extends ZhuB{
public ZhuBimpl3(ZhuA a) {
super(a);
}
@Override
public void decoration() {
System.out.println("开始挂壁画");
}
}
public class Test {
public static void main(String[] args) {
ZhuA a=new ZhuAimpl();
a.operation();
System.out.println("-----------------------");
ZhuA a1=new ZhuBimpl1(a);
a1.operation();
System.out.println("-----------------------");
ZhuA a2=new ZhuBimpl2(a1);
a2.operation();
System.out.println("-----------------------");
ZhuA a3=new ZhuBimpl3(a2);
a3.operation();
System.out.println("-----------------------");
ZhuA aa = new ZhuBimpl3(new ZhuBimpl2(new ZhuBimpl1(new ZhuAimpl())));
aa.operation();
System.out.println("-----------------------");
ZhuA aaa = new ZhuBimpl3(new ZhuBimpl2(new ZhuAimpl()));
aaa.operation();
System.out.println("-----------------------");
ZhuA aaaa = new ZhuBimpl3(new ZhuAimpl());
aaaa.operation();
}
}