当前位置: 首页 > wzjs >正文

佛山网站制作哪里好高德地图导航下载

佛山网站制作哪里好,高德地图导航下载,南京市住房和城乡建设部网站,新浪云部署wordpress组合模式 描述基本使用所有节点方法一致使用 叶子无实现子节点使用 添加向上查询使用(没变化) 描述 组合模式用于描述部分与整体的关系,将个体对象与组合对象的行为统一,便于维护整个数据集。 基本使用 所有节点方法一致 定义…

组合模式

  • 描述
    • 基本使用
      • 所有节点方法一致
        • 使用
      • 叶子无实现子节点
        • 使用
    • 添加向上查询
        • 使用(没变化)

描述

组合模式用于描述部分与整体的关系,将个体对象与组合对象的行为统一,便于维护整个数据集。

基本使用

所有节点方法一致

  • 定义通用操作抽象组件
public abstract class AbstractComponent {private final String name;protected AbstractComponent(String name) {this.name = name;}public void description() {System.out.println("name: " + this.name);}public abstract void addItem(AbstractComponent child);public abstract void deleteItem(AbstractComponent child);public abstract List<AbstractComponent> getChildren();
}
  • 定义树枝节点
public class ComplexComponent extends AbstractComponent {private final List<AbstractComponent> children = new ArrayList<>();protected ComplexComponent(String name) {super(name);}public void addItem(AbstractComponent child) {children.add(child);}public void deleteItem(AbstractComponent child) {children.remove(child);}public List<AbstractComponent> getChildren() {return children;}
}
  • 定义叶子节点
public class LeafComponent extends AbstractComponent {protected LeafComponent(String name) {super(name);}@Overridepublic void addItem(AbstractComponent child) {}@Overridepublic void deleteItem(AbstractComponent child) {}@Overridepublic List<AbstractComponent> getChildren() {return null;}
}
使用

由于所有节点操作一致,在使用中无需强转

public class Sample {public static void main(String[] args) {AbstractComponent root = new ComplexComponent("L1");AbstractComponent l2 = new ComplexComponent("L2");root.addItem(l2);AbstractComponent l2_1 = new ComplexComponent("L2_1");AbstractComponent l2_2 = new ComplexComponent("L2_2");l2.addItem(l2_1);l2.addItem(l2_2);AbstractComponent l2_1_1 = new ComplexComponent("L2_1_1");l2_1.addItem(l2_1_1);AbstractComponent l2_1_2 = new ComplexComponent("L2_1_2");l2_1.addItem(l2_1_2);printComponent(root);}private static void printComponent(AbstractComponent root) {root.description();root.getChildren().forEach(component -> {if (component instanceof ComplexComponent) {printComponent(component);} else {component.description();}});}
}

叶子无实现子节点

  • 定义通用操作的抽象组件
public abstract class AbstractComponent {private final String name;protected AbstractComponent(String name) {this.name = name;}public void description() {System.out.println("name: " + this.name);}
}
  • 定义树枝节点
public class ComplexComponent extends AbstractComponent {private final List<AbstractComponent> children = new ArrayList<>();protected ComplexComponent(String name) {super(name);}public void addItem(AbstractComponent child) {children.add(child);}public void deleteItem(AbstractComponent child) {children.remove(child);}public List<AbstractComponent> getChildren() {return children;}
}
  • 定义叶子节点
public class LeafComponent extends AbstractComponent {protected LeafComponent(String name) {super(name);}
}
使用
public class Sample {public static void main(String[] args) {ComplexComponent root = new ComplexComponent("L1");ComplexComponent l2 = new ComplexComponent("L2");root.addItem(l2);ComplexComponent l2_1 = new ComplexComponent("L2_1");ComplexComponent l2_2 = new ComplexComponent("L2_2");l2.addItem(l2_1);l2.addItem(l2_2);ComplexComponent l2_1_1 = new ComplexComponent("L2_1_1");l2_1.addItem(l2_1_1);ComplexComponent l2_1_2 = new ComplexComponent("L2_1_2");l2_1.addItem(l2_1_2);printComponent(root);}private static void printComponent(ComplexComponent root) {root.description();root.getChildren().forEach(component -> {if (component instanceof ComplexComponent) {printComponent((ComplexComponent) component);} else {component.description();}});}
}

添加向上查询

在有的场景中,需要支持向上查询。
可以在通用抽象中定义一个上级节点,然后在父节点添加子节点同时为子节点关联父节点

  • 定义通用抽象组件
public abstract class AbstractComponent {private final String name;/*** 新增了一个父级成员*/private AbstractComponent parent;protected AbstractComponent(String name) {this.name = name;}public void description() {System.out.println("name: " + this.name + "  parent: " + (Objects.isNull(getParent()) ? "null" : getParent().getName()));}public abstract void addItem(AbstractComponent child);public abstract void deleteItem(AbstractComponent child);public abstract List<AbstractComponent> getChildren();public void setParent(AbstractComponent parent) {this.parent = parent;}public AbstractComponent getParent() {return parent;}public String getName() {return name;}
}
  • 定义树枝节点
public class ComplexComponent extends AbstractComponent {private final List<AbstractComponent> children = new ArrayList<>();protected ComplexComponent(String name) {super(name);}/*** 在添加子节点时 同时设置子节点的父级节点* @param child*/public void addItem(AbstractComponent child) {children.add(child);child.setParent(this);}/*** 在移除子节点时 同时清空子节点的父级节点* @param child*/public void deleteItem(AbstractComponent child) {children.remove(child);child.setParent(null);}public List<AbstractComponent> getChildren() {return children;}
}
  • 定义叶子节点(没变化)
public class LeafComponent extends AbstractComponent {protected LeafComponent(String name) {super(name);}@Overridepublic void addItem(AbstractComponent child) {}@Overridepublic void deleteItem(AbstractComponent child) {}@Overridepublic List<AbstractComponent> getChildren() {return null;}
}
使用(没变化)
public class Sample {public static void main(String[] args) {AbstractComponent root = new ComplexComponent("L1");AbstractComponent l2 = new ComplexComponent("L2");root.addItem(l2);AbstractComponent l2_1 = new ComplexComponent("L2_1");AbstractComponent l2_2 = new ComplexComponent("L2_2");l2.addItem(l2_1);l2.addItem(l2_2);AbstractComponent l2_1_1 = new ComplexComponent("L2_1_1");l2_1.addItem(l2_1_1);AbstractComponent l2_1_2 = new ComplexComponent("L2_1_2");l2_1.addItem(l2_1_2);printComponent(root);}private static void printComponent(AbstractComponent root) {root.description();root.getChildren().forEach(component -> {if (component instanceof ComplexComponent) {printComponent(component);} else {component.description();}});}
}
http://www.dtcms.com/wzjs/559672.html

相关文章:

  • asp.net网站开发文档网络规划设计师教程第二版 pdf下载地址
  • 中国建设业管理协会网站网络推广 深圳
  • 旅行社网站方案优秀电商网站
  • 购物网站建设实训心得体会wordpress比较
  • 化妆品网站后台青羊区建设网站
  • 企业商务网站的技术中文外贸网站建设
  • 自己做的网站网站搜索物流网站建设流程图
  • asp业务网站东莞网站设地
  • 网站h1标签的应用114黄页信息网
  • 杏坛网站建设深圳专业学校网站建设
  • 公司内部网站的作用百度上做优化一年多少钱
  • 怎样保存网站资料 做证据做网站如何保证询盘数量
  • 那些空号检测网站是怎么做的wordpress输入xml
  • 大型地方门户网站源码vs html5网站开发
  • 网络网站销售珠海网站建设公司排名
  • 做公司网站要营业执照吗西安哪有建网站的
  • 网络营销与网站推广的区别上海闸北网站建设
  • 网站建设丷金手指专业十五广州东站建站时间
  • 在线制作个人网站网页版微信二维码扫描
  • 网站开发软硬件条件上海关键词优化排名哪家好
  • 网站怎么加友情链接wordpress移除仪表盘
  • 重庆做网站人才汕头网络推广平台
  • 网站建设与规划心得体会无锡网站制作电话多少
  • 服务好的微网站建设wordpress时间函数
  • 建设网站需要什么设备nginx 网站建设
  • 如何搭建网站教程视频双轨网站开发
  • 网站建设的发展前景中囯联通腾迅
  • 如何虚拟一个公司网站即时聊天wordpress手机app
  • 四川电大住房和城乡建设厅网站张家港高端网站建设
  • 沈阳中联做网站贵阳做网站好的公司