美文网首页
设计模式-组合模式

设计模式-组合模式

作者: liuzhimi | 来源:发表于2019-04-29 23:01 被阅读0次

    介绍

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

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

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

    相关文章

      网友评论

          本文标题:设计模式-组合模式

          本文链接:https://www.haomeiwen.com/subject/jqcpnqtx.html