装饰类通常用于扩展既有功能
//抽象类接口
public interface Car {
void run();
}
//实体类
class CarImpl implements Car{
@Override
public void run() {
System.out.println("汽车跑");
}
}
//装饰类
class Fly extends CarImpl{
private Car car;
public Fly(Car car) {
this.car = car;
}
public void fly() {
System.out.println("飞行");
}
public void run() {
car.run();
fly();
}
}
//装饰类
class Swim extends CarImpl{
private Car car;
public Swim(Car car) {
this.car = car;
}
public void swim() {
System.out.println("游泳");
}
public void run() {
car.run();
swim();
}
}
//测试类
public class Test {
public static void main(String[] args) {
Car car = new CarImpl();
Fly fly = new Fly(car);
Swim swim = new Swim(fly);
swim.run();
}
}
汽车跑
飞行
游泳