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

这是一个概念性问题。

在查看代码时,我想要完全理解复合设计模式。PBJ是保持表观类型食品的叶子一个复合对象,但是,它是由封装保护,只有BreadJelly并且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图。


汪汪一只猫
浏览 549回答 3
3回答

慕尼黑5688855

从我的理解,组成图案的目的是让你忽略的部件之间(的区别Bread,Jelly,PeanutButterAndJellySandwich你的情况等),它们的层次,使用运行时多态性的可能性最大。这意味着让你以统一的方式处理它们(通过循环,最有可能),让运行时完成其余的工作。因此,由于您的示例只是没有显示此意图并手动处理,我会说这不是复合模式,而是使用运行时多态性的简单(计划)。但是,您的代码确实抓住了PeanutButterAndJellySandwicha的位置Food,使未来可能的使用(例如PeanutButterAndJellySandwich,使用成分PeanutButterAndJellySandwich)成为复合模式的目标。(但您没有在代码中显示此意图。)

SMILET

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

相关分类

Java