软工2021上下午第六题(组合模式)

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

层叠菜单是窗口风格的软件系统中经常采用的一种系统功能组织方式。层叠菜单中包含的可能是一个菜单项(直接对应某个功能),也可能是一个子菜单,现在采用组合(composite)设计模式实现层叠菜单,得到如图6-2所示的类图。

复制代码
package cn.itcast.hotel.test;

import java.util.List;

abstract class MenuComponent {//构成层叠菜单的元素
    (1) String name;

    public void printName() {
        System.out.println(name);
    }

   (2)

    public abstract boolean removeMenuElement(MenuComponent element);

    (3)

}

package cn.itcast.hotel.test;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lst
 * @date 2023年11月28日 15:42
 */
class Menu extends MenuComponent {
    (4)

    public Menu(String name) {
        this.name = name;
        this.elementList = new ArrayList<>();
    }

    public boolean addMenuElement(MenuComponent element) {
        return elementList.add(element);
    }

    public boolean removeMenuElement(MenuComponent element) {
        return elementList.remove(element);
    }

    public List<MenuComponent> getElement() {
        return elementList;
    }

}

package cn.itcast.hotel.test;

import java.util.List;

/**
 * @author lst
 * @date 2023年11月28日 15:44
 */
class MenuItem extends MenuComponent {

    public MenuItem(String name) {
        this.name = name;
    }

    public boolean addMenuElement(MenuComponent element) {
        return false;
    }

    public boolean removeMenuElement(MenuComponent element) {
        return false;
    }

    public List<MenuComponent> getElement() {
        return null;
    }
}

package cn.itcast.hotel.test;

import java.util.List;

/**
 * @author lst
 * @date 2023年11月28日 15:45
 */
class CompositeTest {
    public static void main(String[] args) {
        MenuComponent mainMenu = new Menu("Insert");
        MenuComponent subMenu = new Menu("Chart");
        MenuComponent element = new MenuItem("On This Sheet");
       (5)
        subMenu.addMenuElement(element);
        printMenus(mainMenu);
    }

    private static void printMenus(MenuComponent ifile) {
        ifile.printName();
        List<MenuComponent> children = ifile.getElement();

        if (children == null) {
            return;
        }
        for (MenuComponent element : children) {
            printMenus(element);
        }
    }
}

答案

(1)protected

(2)abstract boolean addMenuElement(MemuComponent element)

(3)abstract List getElement()

(4)List elementList

(5)mainMenu.addMenuElement(subMenu)

答案解析:

本题是典型的组合模式应用。

首先根据类图中name标注的为#(+表示public,-表示private,#表示protected),第(1)空对name的修饰应该是protected。

然后根据抽象类和实现类的对应关系,可以补充第(2)(3)空,这两处缺失的方法根据下文代码进行补充,注意方法名必须用abstract修饰,并且注意抽象方法的写法没有具体方法体。其中第(2)空填写abstract boolean addMenuElement(MemuComponent element) ;

第(3)空填写abstract List getElement();

第(4)空缺失了一个属性,此时根据下文的同名构造函数会发现,此处传参给了this.name以及this.elementList,name可以根据父类继承使用,而elementList需要定义,因此此处缺失的参数是elementList,类型根据后面的赋值类型进行定义,即第(4)空填写List elementList。

第(5)空看懂逻辑mainmenu中添加subMenu

相关推荐
卑微的Coder3 小时前
Redis Set集合命令、内部编码及应用场景(详细)
java·数据库·redis
CrissChan3 小时前
Pycharm 函数注释
java·前端·pycharm
C++ 老炮儿的技术栈4 小时前
UDP 与 TCP 的区别是什么?
开发语言·c++·windows·算法·visual studio
启航挨踢4 小时前
java学习电子书推荐
java
wgslucky4 小时前
Dubbo报错:module java.base does not “opens java.lang“ to unnamed module
java·开发语言·dubbo
whyeekkk4 小时前
python打卡第48天
开发语言·python
DougLiang5 小时前
关于easyexcel动态下拉选问题处理
java·开发语言
mochensage5 小时前
C++信息学竞赛中常用函数的一般用法
java·c++·算法
计蒙不吃鱼6 小时前
一篇文章实现Android图片拼接并保存至相册
android·java·前端
小海编码日记6 小时前
Java八股-JVM & GC
java