0

Есть диапазоны цен (Низкий, Средний, Высокий). Диапазоны цен различны для разных типов продукта.Предложение дизайна шаблона Java. (Обработчик со статическими параметрами и методами)

У меня есть класс обработчика, который содержит все диапазоны цен и может определять ценовой диапазон продукта.

Например:

Продукт А, Цена: 200, Диапазон цен: 50-300 (середина)

Продукт B, цена: 80, Диапазон цен: 70-120 (высокий)

public class Handler { 

     // static priceRangeMap for Price ranges 

    public static void addPriceRange(PriceRange PriceRange){ 
     //add price ranges to the priceRangeMap 
     //initialised when the application is started 
    } 

    public static String getClassificationForProduct(ProductData product) { 
     //determine classification for a product 
    } 
} 

public class ProductData { 

    public String getClassification() { 
     return Handler.getClassificationForProduct(this); 
    } 
} 

Я не хочу хранить ценовые диапазоны в продукте, потому что есть много продуктов, которые имеют одинаковые диапазоны.

Это уродливое решение?

Handler.getClassificationForProduct(this);

Есть ли лучшее решение?

+0

Состав приходит на ум. Это не шаблон дизайна, но если вы хотите использовать повторно используемые диапазоны цен, сделайте его классом. –

+0

Есть ли способ/шаблон, чтобы узнать, похож ли Продукт A на продукт C или нет атрибута атрибута - что-либо, что их связывает? – charlypu

+0

Что касается вашего редактирования, да, ваш класс Handler имеет плохой запах кода, начиная с его статических методов. Я думаю, тебе нужно просто избавиться от него. –

ответ

1

Я думаю, что вы ищете flyweight pattern. Мухи - это объект, который минимизирует использование памяти путем совместного использования как можно большего количества данных с другими подобными объектами; это способ использовать объекты в больших количествах, когда простое повторное представление будет использовать недопустимый объем памяти.

Для объектов с мухой-паттерном должны быть неизменными, чтобы их можно было разделить с мыслью о безопасности потоков. С неизменяемыми объектами безопасность потоков освобождается. Вы можете сделать что-то, как показано ниже. Либо вы можете взять PriceCategory как enum или какой-то неизменяемый объект. Поскольку enum неотъемлемо неизменен, поэтому мы можем иметь минимальное пространство для создания объекта и также безопасно.

public class Handler { 
public enum PriceCategory{ 
    LOW,MID, HIGH; 
} 
private static class Element{ 
    private int min; 
    private int max; 
    private Element(int min, int max){ 
     this.min=min; 
     this.max=max; 
    } 
} 
private static final Map<Element, PriceCategory> map = new HashMap<Element, PriceCategory>(); 
static{ 
    map.put(new Element(100, 200), Handler.PriceCategory.LOW); 
    map.put(new Element(201, 300), Handler.PriceCategory.MID); 
    map.put(new Element(301, 400), Handler.PriceCategory.HIGH); 
} 
public static String getClassificationForProduct(ProductData product) { 
    //here just check for which range this product price is belonging and return that enum/immutable object 
} 
} 
Смежные вопросы