设计模式学习笔记之组合模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式学习笔记之组合模式相关的知识,希望对你有一定的参考价值。
组合模式
允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
使用组合结构,我们能把相同的操作应用在组合和个别对象上。换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。
说明:
1、组合模式使添加或者删除子节点变得容易;
场景:
1、想要标识对象的部分-整体结构;
2、想要客户端忽略组合对象和个体对象的差异,客户端将统一使用组合结构中的所有对象;
/**
* 为组合中所有对象定义一个接口,不管是组合还是节点
* */
public abstract class Component {
public void add(Component component) {
new UnsupportedOperationException();
}
public void remove(Component component) {
new UnsupportedOperationException();
}
public String getName() {
return null;
}
public void foreach(){
new UnsupportedOperationException();
}
}
|
/**
* 子节点
* */
public class Leaf extends Component{
String name;
public Leaf(String name) {
this.name = name;
}
@Override
public void add(Component component) {
System.out.println("不存在子节点,无法添加。。。");
}
@Override
public void remove(Component component) {
new UnsupportedOperationException();
}
@Override
public String getName() {
return name;
}
}
|
/**
* 组合类
* */
public class Composite extends Component{
String name;
private List<Component> child = new ArrayList<Component>();
public Composite(String name) {
this.name = name;
}
@Override
public void add(Component component) {
child.add(component);
}
@Override
public void remove(Component component) {
child.remove(component);
}
@Override
public void foreach(){
for(Component component : child) {
System.out.println(component.getName());
}
}
@Override
public String getName() {
return name;
}
}
|
public class Client {
public static void main(String[] args) {
Component component = new Composite("根节点");
Component child = new Composite("一级子节点child");
Component child_1 = new Leaf("一级子节点child之子节点一");
Component child_2 = new Leaf("一级子节点child之子节点二");
child.add(child_1);
child.add(child_2);
Component child2 = new Composite("一级子节点child2");
component.add(child);
component.add(child2);
component.foreach();
}
}
|
参考资料:《Head First 设计模式》
以上是关于设计模式学习笔记之组合模式的主要内容,如果未能解决你的问题,请参考以下文章