Я пытаюсь понять эту практику чистого кода с примером. Рассмотрим класс продукта с коробкой переключения для скидки. Я пытаюсь заменить оператор switch на полиморфизм.
Перед кодом:
class Product {
String priceCode;
int discount;
Product(String priceCode) {
setDiscount(priceCode);
}
public int getDiscount() {
return discount;
}
public void setDiscount(String priceCode) {
switch (priceCode) {
case "CODE1":
discount = // some logic;
case "CODE2":
discount = // some other logic;
case "CODE3":
discount = // some other logic;
}
}
}
В приведенном ниже коде, как вы можете видеть, я удалил оператор switch, но у меня все еще есть условия для создания объекта discountStrategy. Мой вопрос: у меня все еще есть условия, которые я пытаюсь удалить с помощью полиморфизма.
После кода:
class Product {
String priceCode;
DiscountStrategy discountStrategy;
Product(String priceCode) {
setDiscount(priceCode);
}
public int getDiscount() {
return discountStrategy.getDiscount();
}
public void setDiscount(String priceCode) {
if (priceCode.equals("CODE1")) {
discountStrategy = new DiscountStrategy1();
} else if (priceCode.equals("CODE2")) {
discountStrategy = new DiscountStrategy2();
}
// ...
}
}
interface DiscountStrategy {
public int getDiscount();
}
class DiscountStrategy1 implements DiscountStrategy {
public int getDiscount() {
// calculate & return discount;
}
}
class DiscountStrategy2 implements DiscountStrategy {
public int getDiscount() {
// calculate & return discount;
}
}
class DiscountStrategy3 implements DiscountStrategy {
public int getDiscount() {
// calculate & return discount;
}
}
Не могли бы вы помочь мне понять эту концепцию с лучшей реализацией этого примера?