предложение для шаблона проектирования Java - PullRequest
0 голосов
/ 31 октября 2018

Я начинаю использовать шаблон проектирования в Java. Теперь я пишу код Java, который проходит все эти тесты:

@Test
    public void createOrder() {
        final Restaurant restaurant = new Restaurant();
        final int tableId = restaurant.initTable(4);
        restaurant.customerSays(tableId, "Joe: Soup");
        restaurant.customerSays(tableId, "Jim: Same");
        restaurant.customerSays(tableId, "Jack: Chips");
        restaurant.customerSays(tableId, "John: Chips");
        assertEquals("Soup, Soup, Chips, Chips",
                restaurant.createOrder(tableId));
    }

    @Test
    public void failedCreationBecauseNotEveryoneOrdered() {
        final Restaurant restaurant = new Restaurant();
        final int tableId = restaurant.initTable(4);
        restaurant.customerSays(tableId, "Joe: Soup");
        restaurant.customerSays(tableId, "Joe: Spaghetti");
        restaurant.customerSays(tableId, "Jim: Roastbeef");
        assertEquals("MISSING 2", restaurant.createOrder(tableId));
        restaurant.customerSays(tableId, "Jack: Spaghetti");
        restaurant.customerSays(tableId, "John: Chips");
        assertEquals("Spaghetti, Roastbeef, Spaghetti, Chips",
                restaurant.createOrder(tableId));
    }

    @Test
    public void failedCreationBecauseNotEnoughPeopleForADishFor2() {

        final Restaurant restaurant = new Restaurant();
        final int tableId = restaurant.initTable(4);
        restaurant.customerSays(tableId, "Joe: Soup");
        restaurant.customerSays(tableId, "Jim: Same");
        restaurant.customerSays(tableId, "Joe: Fish for 2");
        restaurant.customerSays(tableId, "Jack: Chips");
        restaurant.customerSays(tableId, "John: Chips");
        assertEquals("MISSING 1 for Fish for 2",
                restaurant.createOrder(tableId));
        restaurant.customerSays(tableId, "John: Fish for 2");
        assertEquals("Fish for 2, Soup, Chips, Fish for 2",
                restaurant.createOrder(tableId));
    }

Я начинаю использовать шаблон фабричного дизайна:

MyDesign но я думаю, что это не правильно использовать! Любое предложение?

1 Ответ

0 голосов
/ 31 октября 2018

Я вижу здесь шанс для трех моделей:

  • Шаблон фасад для моделирования класса Restaurant: кажется, что Restaurant должен содержать свою собственную модель и под-шаблоны, и что он просто раскрывает все методы, необходимые для доступа их.

  • Шаблон команды для реализации метода customerSays: Скорее всего, он должен создать объект в частном порядке для моделирования запрошенной операции.

  • Шаблон синтаксического анализатора (о, хорошо: я не знаю, можно ли считать его шаблоном, но все же здесь требуется синтаксический анализатор): этот будет принимать строковый аргумент customerSays, анализируйте его char по char и производите определенный javabean со специфическими свойствами.

В любом случае, вы увидите это более ясно, если начнете с разработки модели объектов и отношений наиболее рациональным способом для выполнения заданных тестов, не обращая особого внимания на точные сигнатуры методов. Затем, когда вы, наконец, получили его, спроектируйте класс Restaurant, чтобы сгруппировать их вместе, теперь с учетом запрошенных сигнатур методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...