为了账号安全,请及时绑定邮箱和手机立即绑定

java设计模式的建议

java设计模式的建议

犯罪嫌疑人X 2021-12-22 15:31:24
我开始在 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 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

我在这里看到了三种模式的机会:

  • 门面模式模型Restaurant类:看来Restaurant应该包含它自己的模式和子模式,而且它只是暴露所有需要访问它们的方法。

  • 实现该方法的命令模式customerSays:最有可能的是,它应该私下创建一个对象来对请求的操作进行建模。

  • 解析器模式(哦,OK:我不知道这是否会被视为一种模式,但仍这里需要一个解析器):这一次将采取的字符串参数customerSays,分析它烧焦成炭,并产生一个特定的JavaBean具有特定属性。

无论如何,如果您以最合理的方式设计对象和关系的模型来完成给定的测试,而无需过多关注确切的方法签名,那么您会更清楚地看到它。然后,当你最终得到它时,设计Restaurant类将它们组合在一起,现在考虑到请求的方法签名。


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信