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

Composite Design模式可以避免Collection(List,HashTable)

Composite Design模式可以避免Collection(List,HashTable)

汪汪一只猫 2019-04-10 18:15:56
这是一个概念性问题。在查看代码时,我想要完全理解复合设计模式。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个赞

从我的理解,组成图案的目的是让你忽略的部件之间(的区别BreadJellyPeanutButterAndJellySandwich你的情况等),它们的层次,使用运行时多态性的可能性最大。这意味着让统一的方式处理它们(通过循环,最有可能),让运行时完成其余的工作

因此,由于您的示例只是没有显示此意图并手动处理,我会说这不是复合模式,而是使用运行时多态性的简单(计划)。

但是,您的代码确实抓住了PeanutButterAndJellySandwicha的位置Food,使未来可能的使用(例如PeanutButterAndJellySandwich,使用成分PeanutButterAndJellySandwich)成为复合模式的目标。(但您没有在代码中显示此意图。)



查看完整回答
反对 回复 2019-05-15
?
SMILET

TA贡献1796条经验 获得超4个赞

复合模式用于创建树结构。如果你的三明治没有多大意义。你只有一个简单的图层(列表)Ingredients。除了你想要三明治作为三明治的一部分。对我来说,你的设计刚刚被打破。在适用的地方使用模式。不要使用模式,因为它们存在。


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 548 浏览

添加回答

举报

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