Я пытаюсь изучить узор декоратора, и у меня есть проблема с ним.Проблема с рисунком декоратора
Во-первых, у меня есть интерфейс
public interface MyCar {
public String getMessage(int speed);
public int getPrice();
}
Я реализовал этот класс, как это;
public class Car implements MyCar{
protected int price;
protected boolean feature1;
protected boolean feature2;
public Car(){
this.price = 0;
this.feature1 = false;
this.feature2 = false;
}
publicCar(int price){
this.price = price;
this.feature1 = false;
this.feature2 = false;
}
int getPrice(){
return price + (feature1 ? 1000 : 0) + (feature2 ? 2000 : 0);
}
}
После этого я получены две машины из этого класса, как
public class Car1 extends Car{
private static int price = 20000;
public Car1() {
super(price);
}
}
car2 класс точно так же, за исключением того, от цены, которая является 30000.
После этого момента я создал класс автомобиля декоратора который;
public abstract class CarDecorator extends Car {
protected Car decoratedCar;
public CarDecorator(){
decoratedCar = new Car();
}
public CarDecorator(Car decoratedCar) {
this.decoratedCar = decoratedCar;
}
public int getPrice(){
return this.decoratedCar.getPrice();
}
}
Наконец я создал класс 2 decorater, полученный из CarDecorator:
public class F1Decorator extends CarDecorator{
public F1Decorator(Car car) {
super(car);
decoratedCar.feature1 = true;
}
}
public class F2Decorator extends CarDecorator{
public F2Decorator(Car car) {
super(car);
decoratedCar.feature2 = true;
}
}
public class Test {
public static void main(String[] args){
Car car1 = new Car1();
System.out.println("Price: " + car1.getPrice());
car1 = new F1Decorator(car1);
System.out.println("Price: " + car1.getPrice());
car1 = new F2Decorator(car1);
System.out.println("Price: " + car1.getPrice());
}
}
И выход
Price: 20000
Price: 21000
Price: 21000
Почему feature2 не оказывает никакого влияния на car1. Что не так с моим дизайном. Если вы можете помочь, я догадываюсь, что очень хорошо пойму шаблон декоратора.
Я не вижу 'feature2' используется в' метод getPrice'. Возможно, его следует использовать там. – rgettman
извините за опечатку. Я изменил его. Просто скопируйте ошибку пасты. Проблема все еще возникает. – xxlali