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

相关推荐
lly20240627 分钟前
jQuery Mobile 表格
开发语言
惊讶的猫31 分钟前
探究StringBuilder和StringBuffer的线程安全问题
java·开发语言
jmxwzy35 分钟前
Spring全家桶
java·spring·rpc
Halo_tjn37 分钟前
基于封装的专项 知识点
java·前端·python·算法
m0_748233171 小时前
30秒掌握C++核心精髓
开发语言·c++
Fleshy数模1 小时前
从数据获取到突破限制:Python爬虫进阶实战全攻略
java·开发语言
Duang007_2 小时前
【LeetCodeHot100 超详细Agent启发版本】字母异位词分组 (Group Anagrams)
开发语言·javascript·人工智能·python
像少年啦飞驰点、2 小时前
零基础入门 Spring Boot:从“Hello World”到可上线的 Web 应用全闭环指南
java·spring boot·web开发·编程入门·后端开发
苍煜2 小时前
万字详解Maven打包策略:从基础插件到多模块实战
java·maven
froginwe112 小时前
Redis 管道技术
开发语言