软工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

相关推荐
zl9798992 分钟前
MybatisPlus-注解
java·spring·maven
thinkMoreAndDoMore10 分钟前
深度学习(3)-TensorFlow入门(常数张量和变量)
开发语言·人工智能·python
杰九12 分钟前
【环境配置】maven,mysql,node.js,vue的快速配置与上手
java·vue.js·spring boot·mysql·node.js·maven
wapicn9923 分钟前
‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级
java·人工智能·python·金融·汽车·php
蓝桉8021 小时前
图片爬取案例
开发语言·数据库·python
逸狼1 小时前
【JavaEE进阶】Spring DI
java·开发语言
yonuyeung1 小时前
代码随想录算法【Day54】
java·数据结构·算法
敲上瘾1 小时前
基础dp——动态规划
java·数据结构·c++·python·算法·线性回归·动态规划
my_styles1 小时前
2025-alibaba-Sentinel组件
java·开发语言·sentinel