public class CompositeTest {
public static void main(String[] args){
// 創(chuàng)建主菜單
MenuComponent mainMenu = new Menu("Insert");
// 創(chuàng)建子菜單
MenuComponent subMenu = new Menu("Chart");
// 創(chuàng)建菜單項(xiàng)
MenuComponent element = new MenuItem("On This Sheet");
// 將子菜單添加到主菜單中
mainMenu.addMenuElement(subMenu);
// 將菜單項(xiàng)添加到子菜單中
subMenu.addMenuElement(element);
// 打印菜單結(jié)構(gòu)
printMenus(mainMenu);
}
private static void printMenus(MenuComponent ifile){
// 打印當(dāng)前菜單的名稱
ifile.printName();
// 獲取當(dāng)前菜單的子元素列表
List<MenuComponent> children = ifile.getElement();
// 如果子元素列表為空,則直接返回
if(children == null) return;
// 遍歷子元素列表,遞歸打印每個(gè)子元素的名稱
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
?類:表示菜單,可以包含其他菜單或菜單項(xiàng)。
MenuItem
?類:表示菜單中的一個(gè)具體項(xiàng)。
CompositeTest
?類:包含了?main
?方法,用于測試組合模式的實(shí)現(xiàn)。
在 CompositeTest
類中,main
方法創(chuàng)建了一個(gè)主菜單、一個(gè)子菜單以及一個(gè)菜單項(xiàng),并將它們按照一定的結(jié)構(gòu)添加到了一起。然后調(diào)用 printMenus
方法打印整個(gè)菜單的結(jié)構(gòu)。
Menu
類表示菜單,它繼承自 MenuComponent
抽象類,并實(shí)現(xiàn)了該抽象類中的抽象方法。Menu
類中包含一個(gè) elementList
成員變量,用于存儲(chǔ)菜單中的子元素(即菜單或菜單項(xiàng))。它提供了添加和移除子元素的方法,并實(shí)現(xiàn)了抽象方法 getElement
來獲取子元素列表。
MenuComponent
抽象類定義了菜單組件的基本行為,包括打印名稱和管理子元素的方法。它有一個(gè) name
成員變量表示菜單組件的名稱,并定義了一個(gè)抽象方法 addMenuElement
用于添加子元素,以及一個(gè)抽象方法 getElement
用于獲取子元素列表。文章來源:http://www.zghlxwxcb.cn/news/detail-851750.html
MenuItem
類表示菜單中的一個(gè)具體項(xiàng),它繼承自 MenuComponent
抽象類,并實(shí)現(xiàn)了該抽象類中的抽象方法。由于菜單項(xiàng)不包含其他子元素,因此 addMenuElement
、removeMenuElement
和 getElement
方法的實(shí)現(xiàn)都返回了相應(yīng)的默認(rèn)值。文章來源地址http://www.zghlxwxcb.cn/news/detail-851750.html
何時(shí)使用組合模式
到了這里,關(guān)于Java設(shè)計(jì)模式—組合模式(Composite Pattern)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!