美文网首页
23种设计模式之组合模式

23种设计模式之组合模式

作者: 阿跳爱学习 | 来源:发表于2019-01-04 22:32 被阅读0次

    优点:一致处理对象以及对象容器。
    缺点:使得设计变得更加复杂。
    组合模式一般处理树形结构,如下图。


    image.png

    组合模式核心:

    • Component(抽象构件):定义叶子和容器的共同点。
    • Leaf(叶子构件):无子节点都称为叶子。
    • Composite(容器构件):用于存储子节点(叶子)。

    模拟一个公司工作的例子。
    首先创建一个Component(抽象构件):

    /**
     * 这是一个Component(抽象构件)
     */
    
    public interface Component {
        void work();
    }
    

    然后Leaf(叶子构件):

    /**
     * 这是一个Leaf(叶子构件)
     */
    
    public class Leaf implements Component {
    
        private String name;
    
        public Leaf(String name) {
            this.name = name;
        }
    
        @Override
        public void work() {
            Log.d("TAG", name + "在工作");
        }
    }
    

    然后是Composite(容器构件):

    import android.util.Log;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 这是一个Composite容器构件
     */
    
    public class Composite implements Component {
    
        private String name;
        private List<Component> list = new ArrayList<>();//用于存储子节点
    
        public Composite(String name) {
            this.name = name;
        }
    
        //新增方法
        public void add(Component c) {
            list.add(c);
        }
    
        //删除方法
        public void remove(Component c) {
            list.remove(c);
        }
    
        //获取子节点方法
        public Component getChild(int index) {
            return list.get(index);
        }
    
        @Override
        public void work() {
            Log.d("TAG", name + "在工作");
            for (Component component : list) {
                component.work();
            }
        }
    }
    
    

    调用:

    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.FragmentActivity;
    
    /**
     * 这是调用者
     */
    
    public class MainActivity extends FragmentActivity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //添加一家公司,在公司中添加一个部门,在部门中添加人员
            Composite company, department;
            company = new Composite("***科技有限公司");
            department = new Composite("软件部");
            Leaf person = new Leaf("张三");
            company.add(department);
            department.add(person);
    
            company.work();
        }
    }
    
    结果: image.png

    已完成测试!有不对的地方欢迎指出,感恩。

    相关文章

      网友评论

          本文标题:23种设计模式之组合模式

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