我开始在 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
类将它们组合在一起,现在考虑到请求的方法签名。
添加回答
举报
0/150
提交
取消