zoukankan      html  css  js  c++  java
  • (八)组合模式-代码实现

    介绍

    意图:将对象组合成树形结构以表示“部分 -整体”的层次结构。 C o m p o s i t e使得用户对单个对象和组合对象的使用具有一致性。

    适用性:1,你想表示对象的部分 -整体层次结构。 2,你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

    应用场景:树形结构,从树顶控制整个树的操作.

    代码:

    //政府接口

    package note.com.composite;
    
    /**
     * 政府接口
     * @author lxz
     *
     */
    public interface Government{
    
        public void build(String str1);
        
        public boolean add(Government gov);
        
        public boolean delete(Government gov);
    }

    //定义了默认方法的抽象类

    package note.com.composite;
    
    /**
     * 构造默认新增,删除方法
     * @author lxz
     *
     */
    public abstract class AbstractGovernment implements Government{
    
        public boolean add(Government gov) {
            return false;
        }
        
        public boolean delete(Government gov) {
            return false;
        }
    }

    //树顶,根节点

    package note.com.composite;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 中国政府
     * @author lxz
     *
     */
    public class ChinaGov extends AbstractGovernment{
    
        private List<Government> govList = new ArrayList<Government>();
        public void build(String str1) {
            System.out.println("中国:"+str1);
            doIter(str1);
        }
        
        private void doIter(String str1){
            for(Government gov:govList){
                gov.build(str1);
            }
        }
        
        @Override
        public boolean add(Government gov) {
            govList.add(gov);
            return true;
        }
        
        @Override
        public boolean delete(Government gov) {
            govList.remove(gov);
            return true;
        }
        
    }

    //无子节点的节点

    package note.com.composite;
    
    /**
     * 北京市政府
     * @author lxz
     *
     */
    public class BeiJingGov extends AbstractGovernment{
    
        public void build(String str1) {
            System.out.println("北京市:"+str1);
        }
    
    }
    package note.com.composite;
    
    /**
     * 郑州市政府
     * @author lxz
     *
     */
    public class ZhengZhouGov extends AbstractGovernment{
    
        public void build(String str1) {
            System.out.println("郑州市:"+str1);
        }
    
    }

    //有子节点的节点

    package note.com.composite;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 河南省政府
     * @author lxz
     *
     */
    public class HeNanGov extends AbstractGovernment{
    
        private List<Government> govList = new ArrayList<Government>();
        public void build(String str1) {
            System.out.println("河南省:"+str1);
            doIter(str1);
        }
        
        private void doIter(String str1){
            for(Government gov:govList){
                gov.build(str1);
            }
        }
        
        
        @Override
        public boolean add(Government gov) {
            govList.add(gov);
            return true;
        }
        
        @Override
        public boolean delete(Government gov) {
            govList.remove(gov);
            return true;
        }
    
    }

    //测试类

    package note.com.composite;
    
    public class CompositeTest {
        public static void main(String[] args) {
            Government gov = new ChinaGov();
            Government beijing = new BeiJingGov();
            Government henan = new HeNanGov();
            gov.add(beijing);
            gov.add(henan);
            Government zhengzhou = new ZhengZhouGov();
            henan.add(zhengzhou);
            
            //中国下发命令
            gov.build("大扫除");
            //河南下发命令
            henan.build("涨工资");
            
        }
    }
  • 相关阅读:
    iOS数据持久化—FMDB框架的简单介绍
    iOS数据持久化—SQLite常用的函数
    多段图动态规划dp
    Cucumber测试驱动开发
    敏捷开发XP
    Android 小票打印USB
    TextInputLayout 用法
    Snackbar 提醒
    PermissionDispatcher 运行时权限框架
    Tinker 热修复
  • 原文地址:https://www.cnblogs.com/qinggege/p/5234317.html
Copyright © 2011-2022 走看看