设计模式(10)--组合模式

组合模式主要应用于具有上下级关系,可以组织树状结构的逻辑,简单的来说就是某个类的方法同时也接受自身类型作为参数。
以下就一个模拟收缴全国税收的例子,阐释组合模式。
类图如下:
这里写图片描述
机构具有添加、删除、收税的方法;城市机构实现所有方法;区县机构实现收税方法;
具体代码如下:

package design;

import java.util.ArrayList;
import java.util.List;


/**   
* @Title: ComponentDesign.java 
* @Package design 
* @author zfy1355_gmail_com   
* @date 2016年3月23日 下午6:32:55 
* @version V1.0   
* @desc 组合模式
* JDK中的应用:
* java.util.Map#putAll(Map)
* java.util.List#addAll(Collection)
* java.util.Set#addAll(Collection)
*/

public class ComponentDesign {

    /**   
    * @Title: ComponentDesign.java 
    * @Package design 
    * @author zfy1355_gmail_com   
    * @date 2016年3月23日 下午6:32:55 
    * @version V1.0   
    * @desc 机构父类
    */
    static abstract class Organization{
        public String name;
        public int texes =0;
        public Organization(String name){
            this.name = name;
        }
        /*添加机构*/
        public abstract void add(Organization org );
        /*删除机构*/
        public abstract void del(Organization org);
        /*收税*/
        public abstract int collectTex();
        /*本地报税*/
        public void setTex(int tex){
            texes = tex;
        }
    }


    /**   
    * @Title: CityOrganization.java 
    * @Package design 
    * @author zfy1355_gmail_com   
    * @date 2016年3月23日 下午6:35:09 
    * @version V1.0   
    * @desc 全国或城市机构
    */
    static class CityOrganization extends Organization{

        public CityOrganization(String name) {
            super(name);
        }

        List<Organization> orgs = new ArrayList<Organization>();
        @Override
        public void add(Organization org) {
            orgs.add(org);
        }

        @Override
        public void del(Organization org) {
            orgs.remove(org);
        }

        @Override
        public int collectTex() {
            int tex=0;
            for(Organization o : orgs){
                tex += o.collectTex();
            }
            System.out.println(name+"缴税:"+tex);
            return tex;
        }
    }

    /**   
    * @Title: CityOrganization.java 
    * @Package design 
    * @author zfy1355_gmail_com   
    * @date 2016年3月23日 下午6:35:09 
    * @version V1.0   
    * @desc 区县机构
    */
    static class DistributeOrganization extends Organization{

        public DistributeOrganization(String name) {
            super(name);
        }

        @Override
        public void add(Organization org)  {
            System.out.println("不允许添加下级机构");
        }

        @Override
        public void del(Organization org) {
            System.out.println("不允许删除下级机构");
        }

        @Override
        public int collectTex() {
            System.out.println(name+"缴税:"+texes);
            return texes;
        }
    }

    /*客户端*/
    public static void main(String[] args) {
        Organization rootOrg = new CityOrganization("全国");
        Organization shanghaiOrg = new CityOrganization("上海");
        Organization beijingOrg = new CityOrganization("北京");
        Organization haidianOrg = new DistributeOrganization("海淀区");
        haidianOrg.setTex(10);
        beijingOrg.add(haidianOrg);
        rootOrg.add(shanghaiOrg);
        rootOrg.add(beijingOrg);

        rootOrg.collectTex();
    }
}

显示结果:

上海缴税:0
海淀区缴税:10
北京缴税:10
全国缴税:10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值