设计模式总结篇系列:组合模式(Composite)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式总结篇系列:组合模式(Composite),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2024字,纯文字阅读大概需要3分钟。
内容图文
在探讨Java组合模式之前,先要明白几个概念的区别:继承、组合和聚合。
继承是is-a的关系。组合和聚合有点像,有些书上没有作区分,都称之为has-a,有些书上对其进行了较为严格区分,组合是contains-a关系,聚合是has-a关系。
组合方式中被组合的对象生命周期不能超过整体,一般写代码时是直接在整体类的构造方法中创建被组合类的对象。如人和手之间的关系,人都没了,还何来手?
聚合方式中对于对象的生命周期则没有此类限制,一般可以在聚合类的构造函数中通过外部传参以赋值给整体(或通过其他set等函数形式),如人有一台电脑的关系。
总体说来,组合关系相对聚合而言整体和部分关系感更强一些。
回到正题,组合模式中当然在组合对象中含有被组合对象的引用,只是不同的是,组合模式在概念上更加严格,通常是指引用的被组合对象类型就是组合对象的类型。如此一来,使得组合对象和被组合对象处理起来具有一致性。当然,前提是组合被对象和被组合对象在本身的概念层次上具有此一致性。
最为经典的体现组合模式的例子是具有树形结构特点的类定义。对于树形结构中的每个结点,由于父结点的孩子节点有可能是有自己的孩子结点,因此,利用组合模式,将所有结点统一设计成同一种类型即可。
1.定义树中结点类, 每个结点都有结点名称,父节点和孩子结点:
1
class
TreeNode {
2
3
private
String name;
4
private
TreeNode parent;
5
private Vector<TreeNode> children = new Vector<TreeNode>();
6 7public TreeNode() {
8 }
910public TreeNode(String name) {
11this.name = name;
12 }
1314public String getName() {
15return name;
16 }
1718publicvoid setName(String name) {
19this.name = name;
20 }
2122public TreeNode getParent() {
23return parent;
24 }
2526publicvoid setParent(TreeNode parent) {
27this.parent = parent;
28 }
2930public Vector<TreeNode> getChildren() {
31return children;
32 }
3334publicvoid setChildren(Vector<TreeNode> children) {
35this.children = children;
36 }
3738// 添加孩子结点39publicvoid addChild(TreeNode child) {
40 children.add(child);
41 }
4243// 删除子结点44publicvoid removeChild(TreeNode child) {
45 children.remove(child);
46 }
4748// 获取子结点49public Enumeration<TreeNode> getChileren() {
50return children.elements();
51 }
5253 }
2.客户端类,创建树:
1
public
class
Tree {
2
3
private
TreeNode root;
4
5
public
Tree() {
6
7
}
8
9
public
Tree(String treeName) {
10 root = new TreeNode(treeName);
11 }
1213publicstaticvoid main(String[] args) {
14 Tree tree = new Tree("A");
15 TreeNode nodeB = new TreeNode("B");
16 TreeNode nodeC = new TreeNode("C");
17 nodeB.addChild(nodeC);
18 tree.root.addChild(nodeB);
19 System.out.println("build the tree finished!");
20 }
2122 }
原文:http://www.cnblogs.com/lwbqqyumidi/p/3758182.html
内容总结
以上是互联网集市为您收集整理的设计模式总结篇系列:组合模式(Composite)全部内容,希望文章能够帮你解决设计模式总结篇系列:组合模式(Composite)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。