猿问

java设计模式的建议

我开始在 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 但我认为它不适合使用!有什么建议吗?


犯罪嫌疑人X
浏览 158回答 1
1回答

有只小跳蛙

我在这里看到了三种模式的机会:该门面模式模型Restaurant类:看来Restaurant应该包含它自己的模式和子模式,而且它只是暴露所有需要访问它们的方法。实现该方法的命令模式customerSays:最有可能的是,它应该私下创建一个对象来对请求的操作进行建模。该解析器模式(哦,OK:我不知道这是否会被视为一种模式,但仍这里需要一个解析器):这一次将采取的字符串参数customerSays,分析它烧焦成炭,并产生一个特定的JavaBean具有特定属性。无论如何,如果您以最合理的方式设计对象和关系的模型来完成给定的测试,而无需过多关注确切的方法签名,那么您会更清楚地看到它。然后,当你最终得到它时,设计Restaurant类将它们组合在一起,现在考虑到请求的方法签名。
随时随地看视频慕课网APP

相关分类

Java
我要回答