装饰设计模式(增强人的走路能力)
0. UML结构图
1. 装饰人走路的示例代码
1.1 走的接口
public interface Go {
void go();
}
1.2 人
public class Man implements Go{
@Override
public void go() {
System.out.println("普通的走");
}
}
1.3 装饰器 - 特殊的人
public class SpecificMan implements Go {
private Go go;
public SpecificMan(Go go) {
this.go = go;
}
@Override
public void go() {
go.go();
}
}
1.4 具体的装饰对象 - 运动员
public class SportsMan extends SpecificMan {
public SportsMan(Go go) {
super(go);
}
private void run() {
System.out.println("跑步");
}
@Override
public void go() {
super.go();
run();
}
}
1.5 具体的装饰对象 - 超人
public class SuperMan extends SpecificMan {
public SuperMan(Go go) {
super(go);
}
private void fly() {
System.out.println("飞行");
}
@Override
public void go() {
super.go();
fly();
}
}
2. 装饰器Test
public class DecoratorTest {
public static void main(String[] args) {
Man man = new Man();
man.go();
System.out.println("-------------------");
SportsMan sportsMan = new SportsMan(man);
sportsMan.go();
System.out.println("-------------------");
SuperMan superMan = new SuperMan(man);
superMan.go();
System.out.println("-------------------");
SuperMan superMan2 = new SuperMan(new SportsMan(new Man()));
superMan2.go();
}
}