这是一个概念性问题。在查看代码时,我想要完全理解复合设计模式。PBJ是保持表观类型食品的叶子一个复合对象,但是,它是由封装保护,只有Bread,Jelly并且PeanutButter可以被设置为的元素。我并不是在倡导人们使用多个字段变量而不是一个List。我知道很多代码可以优化并且重复。然而,我和其他人将在未来对设计模式进行测试,一些教师会尝试一些棘手的事情,以确保他们的学生对材料有充分的了解。所以你认为这个Java程序Run.java符合复合设计标准吗?import java.util.*;interface Food{
public void inspect();}class PBJ implements Food{
private Food bread;
private Food jelly;
private Food peanutButter;
public void setBread(Bread bread){this.bread=bread;}
public void setJelly(Jelly jelly){this.jelly=jelly;}
public void setPeanutButter(PeanutButter butter){this.peanutButter=butter;}
public void inspect(){
if(bread==null || jelly == null || peanutButter == null){
System.out.println("Your PB&J is not finished being made yet");
} else {
System.out.println("Yay time to enjoy your PBJ! Wow that was quick");
}
}}class Bread implements Food{
private Flour flour;
private Salt salt;
public Bread(Flour flour, Salt salt){
this.flour = flour;
this.salt = salt;
}
public void inspect(){System.out.println("Dang those are fine bunns");}}class PeanutButter implements Food{
private Peanuts peanuts;
private Salt salt;
public PeanutButter(Peanuts peanuts, Salt salt){
this.peanuts = peanuts;
this.salt = salt;
}
public void inspect(){System.out.println("Ahhh I need water now");}}class Jelly implements Food{
private Fruit fruit;
private Sugar sugar;
public Jelly(Fruit fruit, Sugar sugar){
this.fruit = fruit;
this.sugar = sugar;
}这是用于快速参考的UML图。
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
从我的理解,组成图案的目的是让你忽略的部件之间(的区别Bread
,Jelly
,PeanutButterAndJellySandwich
你的情况等),它们的层次,使用运行时多态性的可能性最大。这意味着让你以统一的方式处理它们(通过循环,最有可能),让运行时完成其余的工作。
因此,由于您的示例只是没有显示此意图并手动处理,我会说这不是复合模式,而是使用运行时多态性的简单(计划)。
但是,您的代码确实抓住了PeanutButterAndJellySandwich
a的位置Food
,使未来可能的使用(例如PeanutButterAndJellySandwich
,使用成分PeanutButterAndJellySandwich
)成为复合模式的目标。(但您没有在代码中显示此意图。)
SMILET
TA贡献1796条经验 获得超4个赞
复合模式用于创建树结构。如果你的三明治没有多大意义。你只有一个简单的图层(列表)Ingredients
。除了你想要三明治作为三明治的一部分。对我来说,你的设计刚刚被打破。在适用的地方使用模式。不要使用模式,因为它们存在。
添加回答
举报
0/150
提交
取消