package com.example.demo03;
public interface Car {
public void show();
public void run();
}
package com.example.demo03;
public abstract class CarDecorator implements Car{
private Car car;
public CarDecorator(Car car){
this.car = car;
}
public abstract void show();
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
}
package com.example.demo03;
public class FlyCarDecorator extends CarDecorator{
public FlyCarDecorator(Car car) {
super(car);
}
@Override
public void show() {
this.getCar().show();
this.fly();
}
public void fly(){
System.out.println("可以飞");
}
@Override
public void run() {
// TODO Auto-generated method stub
}
}
package com.example.demo03;
public class SwimCarDecorator extends CarDecorator{
public SwimCarDecorator(Car car) {
super(car);
}
@Override
public void show() {
this.getCar().show();
this.swim();
}
public void swim(){
System.out.println("可以游");
}
@Override
public void run() {
// TODO Auto-generated method stub
}
}
package com.example.demo03;
public class RunCar implements Car{
@Override
public void show() {
this.run();
}
public void run(){
System.out.println("可以跑");
}
}
package com.example.demo03;
import org.junit.Test;
public class MainClass {
@Test
public void test01(){
Car flyCar = new RunCar();
CarDecorator carDecorator = new FlyCarDecorator(flyCar);
carDecorator.show();
carDecorator = new SwimCarDecorator(flyCar);
carDecorator.show();
}
@Test
public void test02(){
Car car = new RunCar();
car.show();
System.out.println("------------------------------------");
CarDecorator fly = new FlyCarDecorator(car);
fly.show();
System.out.println("------------------------------------");
CarDecorator swimFly = new SwimCarDecorator(fly);
swimFly.show();
}
@Test
public void test03(){
Car car = new RunCar();
CarDecorator fly = new FlyCarDecorator(car);
CarDecorator swimFly = new SwimCarDecorator(fly);
swimFly.show();
}
}