本文主要是介绍Java设计模式—组合模式(Composite Pattern),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
public 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");// 将子菜单添加到主菜单中mainMenu.addMenuElement(subMenu);// 将菜单项添加到子菜单中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);}}
}
public class Menu extends MenuComponent{private List<MenuComponent> elementList;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;}
}
public 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;}
}
public abstract class MenuComponent {protected String name;public void printName(){System.out.println(name);}public abstract boolean addMenuElement(MenuComponent element);public abstract List<MenuComponent> getElement();
}
MenuComponent
抽象类:定义了菜单组件的基本行为,包括打印名称和管理子元素的方法。
Menu
类:表示菜单,可以包含其他菜单或菜单项。
MenuItem
类:表示菜单中的一个具体项。
CompositeTest
类:包含了 main
方法,用于测试组合模式的实现。
在 CompositeTest
类中,main
方法创建了一个主菜单、一个子菜单以及一个菜单项,并将它们按照一定的结构添加到了一起。然后调用 printMenus
方法打印整个菜单的结构。
Menu
类表示菜单,它继承自 MenuComponent
抽象类,并实现了该抽象类中的抽象方法。Menu
类中包含一个 elementList
成员变量,用于存储菜单中的子元素(即菜单或菜单项)。它提供了添加和移除子元素的方法,并实现了抽象方法 getElement
来获取子元素列表。
MenuComponent
抽象类定义了菜单组件的基本行为,包括打印名称和管理子元素的方法。它有一个 name
成员变量表示菜单组件的名称,并定义了一个抽象方法 addMenuElement
用于添加子元素,以及一个抽象方法 getElement
用于获取子元素列表。
MenuItem
类表示菜单中的一个具体项,它继承自 MenuComponent
抽象类,并实现了该抽象类中的抽象方法。由于菜单项不包含其他子元素,因此 addMenuElement
、removeMenuElement
和 getElement
方法的实现都返回了相应的默认值。
何时使用组合模式
这篇关于Java设计模式—组合模式(Composite Pattern)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!