5 种创建型模式
7 种结构型模式
11 种行为型模式
定义
部分整体模式
,是用于把一组相似的对象当作一个单一的对象组合模式主要包含三种角色:
软件菜单
类图:
代码实现:
菜单组件
public abstract class AbstractMenuComponent {
//菜单组件的名称
protected String name;
//菜单组件的层级
protected int level;
//添加子菜单
public void add(AbstractMenuComponent abstractMenuComponent) {
throw new UnsupportedOperationException();
}
//移除子菜单
public void remove(AbstractMenuComponent abstractMenuComponent) {
throw new UnsupportedOperationException();
}
//获取指定的子菜单
public AbstractMenuComponent getChild(int index) {
throw new UnsupportedOperationException();
}
//获取菜单或者菜单项的名称
public String getName() {
return name;
}
//打印菜单名称的方法(包含子菜单和字菜单项)
public abstract void print();
}
Menu(菜单项)和MenuItem(叶子菜单)
类就可以只覆盖自己感兴趣的方法,而不用搭理不需要或者不感兴趣的方法// 树枝节点
public class Menu extends AbstractMenuComponent {
//菜单可以有多个子菜单或者子菜单项
private final List<AbstractMenuComponent> abstractMenuComponentList = new ArrayList<>();
//构造方法
public Menu(String name,int level) {
this.name = name;
this.level = level;
}
@Override
public void add(AbstractMenuComponent abstractMenuComponent) {
abstractMenuComponentList.add(abstractMenuComponent);
}
@Override
public void remove(AbstractMenuComponent abstractMenuComponent) {
abstractMenuComponentList.remove(abstractMenuComponent);
}
@Override
public AbstractMenuComponent getChild(int index) {
return abstractMenuComponentList.get(index);
}
@Override
public void print() {
//打印菜单名称
for(int i = 0; i < level; i++) {
System.out.print("--");
}
System.out.println(name);
//打印子菜单或者子菜单项名称
for (AbstractMenuComponent component : abstractMenuComponentList) {
component.print();
}
}
}
// 叶子节点
public class MenuItem extends AbstractMenuComponent {
public MenuItem(String name,int level) {
this.name = name;
this.level = level;
}
@Override
public void print() {
//打印菜单项的名称
for(int i = 0; i < level; i++) {
System.out.print("--");
}
System.out.println(name);
}
}
public class Client {
public static void main(String[] args) {
//创建菜单树
AbstractMenuComponent menu1 = new Menu("菜单管理",2);
menu1.add(new MenuItem("展开菜单",3));
menu1.add(new MenuItem("编辑菜单",3));
menu1.add(new MenuItem("删除菜单",3));
menu1.add(new MenuItem("新增菜单",3));
AbstractMenuComponent menu2 = new Menu("角色管理",2);
menu2.add(new MenuItem("新增角色",3));
menu2.add(new MenuItem("修改角色",3));
//创建一级菜单
AbstractMenuComponent component = new Menu("系统管理",1);
//将二级菜单添加到一级菜单中
component.add(menu1);
component.add(menu2);
//打印菜单名称(如果有子菜单一块打印)
component.print();
}
}
// 结果
——系统管理
————菜单管理
——————展开菜单
——————编辑菜单
——————删除菜单
——————新增菜单
————角色管理
——————新增角色
——————修改角色