public abstract class Car {String name = "Unknow Car";public String getName() {return this.name;}public abstract float cost();}// 标准型Benz汽车public class BenzCar extends Car {public BenzCar() {this.name = "Benz";}@Overridepublic float cost() {return 100 * 10000.00f;}}// 标准型BMW汽车public class BmwCar extends Car {public BmwCar() {this.name = "BMW";}@Overridepublic float cost() {return 50 * 10000.00f;}}// 标准QQ汽车public class QQCar extends Car {public QQCar() {this.name = "QQ";}@Overridepublic float cost() {return 3 * 10000.00f;}}// 配件装饰者public abstract class AccesoryDecorator extends Car {public abstract String getName();}// 安全气囊配件public class AirbagAccesory extends AccesoryDecorator {private Car car;public AirbagAccesory(Car car) {this.car = car;}@Overridepublic String getName() {return car.getName() + ",Airbag";}@Overridepublic float cost() {return car.cost() + 1500;}}// 摄像头配件public class CameraAccesory extends AccesoryDecorator {private Car car;public CameraAccesory(Car car) {this.car = car;}@Overridepublic String getName() {return car.getName() + ",Camera";}@Overridepublic float cost() {return car.cost() + 800;}}// 收音机配件public class RadioAccesory extends AccesoryDecorator {private Car car;public RadioAccesory(Car car) {this.car = car;}@Overridepublic String getName() {return car.getName() + ",Radio";}@Overridepublic float cost() {return car.cost() + 600;}}
// 测试程序public class Test {public static void main(String[] args) {Car car1 = new RadioAccesory(new AirbagAccesory(new CameraAccesory(new BenzCar())));printCarInfo(car1);Car car2 = new AirbagAccesory(new CameraAccesory(new BmwCar()));printCarInfo(car2);Car car3 = new RadioAccesory(new QQCar());printCarInfo(car3);}public static void printCarInfo(Car car) {System.out.println("Car Name:" + car.getName() + ",Cost:" + car.cost());}}
联系客服