做网站的成本是什么,网页制作与设计中string对象ppt,互联网技术应用,python可以写网页吗写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用#xff0c;主要是下面的UML图可以起到大作用#xff0c;在你学习过一遍以后可能会遗忘#xff0c;忘记了不要紧#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。
组合模式#xff08;Composit…写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用主要是下面的UML图可以起到大作用在你学习过一遍以后可能会遗忘忘记了不要紧只要看一眼UML图就能想起来了。同时也请大家多多指教。
组合模式Composite
是一种行为型模式。
目录
一、概述
1.1、主要的角色有三种
1.2、直观的理解组合模式
1.3、技术角度描述对象之间关系的UML图
二、举例
2.1、分析如下
2.2、对象之间的关系用UML图表示如下
2.3、Java实现代码如下 一、概述 1、将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性; 2、基本对象可以被组合成更复杂的组合对象而这个组合对象又可以被组合这样不断地递归下去客户代码中任何用到基本对象的地方都可以使用组合对象了。 1.1、主要的角色有三种 组合或组件的抽象类或接口分支类叶子类 1.2、直观的理解组合模式
其实可以把组合模式当做建立一个树形结构然后可以对这个树的所有节点进行统一操作同样这个树还可以根据需要添加删除其它节点或树从而组成更大的树或更小的树。 1.3、技术角度描述对象之间关系的UML图 二、举例
简单举例如下图所示我们要实现这个结构并且打印每个节点的名字。 2.1、分析如下 1、分析上述问题 本例比较简单可以直接看到上述有7个对象且是一个树形结构实践中可能需要我们花一点功夫去判断这些对象是否可以应用这种结构要打印每一个节点的名字也就是我们需要对它们进行重复打印的操作这时可以考虑使用组合模式将他们看成一个整体对这个整体进行统一打印的操作 2、针对角色和方法设计上 组合或组件的抽象类或接口 创建一个抽象节点 分支类 本例有三个分支名字需要分别设置 叶子类 本例有四个叶子名字需要分别设置 自定义方法 输出本节点名字 2.2、对象之间的关系用UML图表示如下 2.3、Java实现代码如下
组合组件的抽象类
abstract class Component {protected String name;public Component(String name) {this.name name;}public abstract void add(Component component);public abstract void remove(Component component);public abstract void display(int depth);
}分支类
public class Composite extends Component {ListComponent list new LinkedList();public Composite(String name) {super(name);}Overridepublic void add(Component component) {list.add(component);}Overridepublic void remove(Component component) {list.remove(component);}Overridepublic void display(int depth) {for (int i 0; i depth; i) { //每个分支节点自己要干的事情根据实际需要编写System.out.print(-);}System.out.println(this.name);for (Component component : list) { //遍历此分支节点的子节点必须要有component.display(depth 2);}//...}
}
叶子类
public class Leaf extends Component {public Leaf(String name) {super(name);}Overridepublic void add(Component component) {System.out.println(叶子节点没有添加子节点功能);//...}Overridepublic void remove(Component component) {System.out.println(叶子节点没有删除子节点功能);//...}Overridepublic void display(int depth) {for (int i 0; i depth; i) { //每个叶子节点自己要干的事情根据实际需要编写System.out.print(-);}System.out.println(this.name);//...}
} 主程序发起请求的类
public class Main {public static void main(String[] args) {Composite root new Composite(root);//创建根节点Leaf leafroot new Leaf(leafroot);//创建叶子节点Composite compositeA new Composite(compositeA);//创建分支节点root.add(leafroot);root.add(compositeA);Leaf leafA new Leaf(leafA);//创建叶子节点Composite compositeAA new Composite(compositeAA);//创建分支节点compositeA.add(leafA);compositeA.add(compositeAA);Leaf leafAAA new Leaf(leafAAA);//创建叶子节点Leaf leafAAB new Leaf(leafAAB);//创建叶子节点compositeAA.add(leafAAA);compositeAA.add(leafAAB);root.display(1);}
}
这里就不再举例了可以把上面的Java例子复制到你本地运行main函数试一下加深理解。这些代码都是我自己学习的时候根据一些教材手敲的不存在bug可以直接运行。
如果觉得本文还不错就请点个赞吧如果有建议也请评论指教和讨论