2016-11-17 2 views
1

У меня есть задача составить программу о Флористе. Я должен сделать класс PriceList, который является синглом. Я также следующая данная функция тестирования главная:Как реализовать карту в одиночном классе?

public static void main(String[] args) { 
PriceList pl = PriceList.getInstance(); 
pl.put("rose", 10.0); 
pl.put("lilac", 12.0); 
pl.put("peony", 8.0); 

Глядя на этих pl.puts(), я решил реализовать интерфейс Map в классе PriceList, но я не знаю точно, как это сделать, когда я имеют только один объект этого класса, и он должен быть Картой. Я уже много писал и не знаю, что делать дальше:

public class PriceList <String, Double> implements Map <String, Double> { 

private static PriceList instance = null; 

protected PriceList() {} 

public static PriceList getInstance() { 
    if (instance == null) 
     instance = new PriceList(); 
    return instance; 
} 

public void put(String string, double d) { 
    // TODO Auto-generated method stub 

}} 

Заранее благодарим за любую помощь!

+0

звучит как домашнее задание ... Что такое точно вопрос? Вы уже протестировали его? – TungstenX

+0

Да, это домашнее задание, но оно больше, чем это. У меня есть класс тестирования FloristsTest, который я не могу изменить, и я должен реализовать необходимые классы, чтобы он работал. Я еще не тестировал его. – yeti

+0

Люди не хотят помогать с домашней работой здесь - это для вас исследование, но кроме того, BrunoDM дал хороший ответ. – TungstenX

ответ

2

Ваш Singleton правильный! Вместо реализации интерфейса карты вы можете создать атрибут Map внутри своего класса и делегировать метод put методу map'put. Возьмем такой пример:

public class PriceList{ 

    private Map<String, Double> map = new HashMap<String, Double>(); 

    private static PriceList instance = null; 

    private PriceList() {} 

    public static PriceList getInstance() { 
     if (instance == null) 
      instance = new PriceList(); 
     return instance; 
    } 

    public void put(String string, double d) { 
     map.put(string,double);  
    } 
} 
+0

Я думал, что мне нужно сделать одноэлементный класс, и единственным объектом этого класса является Map. Это решение мне более удобно, спасибо! – yeti

0

Существует проще способа сделать это:

  • добавить класс PricePerFlower с атрибутами цветов и цене, и положить список в качестве атрибута в классе Прейскурантом.

  • или просто добавить атрибут Map в свой класс PriceList.

0

Реализации карт обычно довольно сложные (по крайней мере, эффективные).

Если вы абсолютно должны использовать эту схему (PriceList как синглтон и реализации Map интерфейса), я предложил бы использовать существующую реализацию карт под капотом:

public class PriceList <String, Double> implements Map <String, Double> { 

    private Map<String, Double> map = new HashMap<>(); 
    private static PriceList instance = null; 

    protected PriceList() {} 

    public static PriceList getInstance() { 
     if (instance == null) 
      instance = new PriceList(); 
     return instance; 
    } 

    public void put(String string, double d) { 
     map.put(string, d); 

    }} 
Смежные вопросы