设计模式-组合模式

介绍

组合模式将一组相似的对象看作一个对象处理。

使用场景
表示对象的部分-整体层次结构时。

优点
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 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!

你可能感兴趣的:(设计模式-组合模式)