介绍
组合模式将一组相似的对象看作一个对象处理。
使用场景:
表示对象的部分-整体层次结构时。
优点:
1.可以清楚地定义分层次的复杂对象,方便对整个层次结构进行控制。
2.高层模块调用简单。
3.增加节点自由方便。
缺点:
在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。
UML类图
Composite.jpg代码实现
View.java
public abstract class View {
protected String name;
public View(String name) {
this.name = name;
}
public abstract void doSomething();
}
ViewGroup.java
public class ViewGroup extends View{
private List<View> views = new ArrayList<>();
public ViewGroup(String name) {
super(name);
}
@Override
public void doSomething() {
System.out.println(name);
if (views != null) {
for(View view : views) {
view.doSomething();
}
}
}
public void addView(View view) {
views.add(view);
}
public void removeView(View view) {
views.remove(view);
}
public View getView(int index) {
return views.get(index);
}
}
TextView.java
public class TextView extends View {
public TextView(String name) {
super(name);
}
@Override
public void doSomething() {
System.out.println(name);
System.out.println("This is TextView!");
}
}
Main.java
public class Main {
public static void main(String[] args) {
ViewGroup viewGroup = new ViewGroup("ViewGroup");
ViewGroup branch1 = new ViewGroup("Branch1");
ViewGroup branch2 = new ViewGroup("Branch2");
TextView tv1 = new TextView("TextView1");
TextView tv2 = new TextView("TextView2");
branch1.addView(tv1);
branch2.addView(tv2);
viewGroup.addView(branch1);
viewGroup.addView(branch2);
viewGroup.doSomething();
}
}
输出:
ViewGroup
Branch1
TextView1
This is TextView!
Branch2
TextView2
This is TextView!
网友评论