组合模式-代码实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合模式-代码实现相关的知识,希望对你有一定的参考价值。

意图:将对象组合成树形结构以表示“部分 -整体”的层次结构。 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("涨工资");
        
    }
}

 

以上是关于组合模式-代码实现的主要内容,如果未能解决你的问题,请参考以下文章

Tailwind.css 体验总结

Tailwind.css 体验总结

适配器模式(C++)多重继承和组合实现

设计模式之组合模式

图像处理基于形状提取和模式匹配组合的面部特征点提取方法(Matlab代码实现)

JavaScript 代码片段