软件体系结构--组合模式

解决问题类型

在软件设计与编程中经常会遇到属性数据,当处理属性结构的数据时,程序员必须经常区分叶子结点和树的一个树枝结点。这使得代码变得更加复杂,容易出错。


解决设计思路

允许一致地对待复杂和原始对象的接口,客户类以相同的方式对待单独的对象和一组对象。


具体待解决的问题

使用不同的语言作为问候语,用户选择一个国家,程序显示该国家见面时使用的问候语。一些国家团体由固定的国家组成,如联合国。


UML设计

软件体系结构--组合模式_第1张图片


核心代码

public abstract class WorldOrganization {
    public abstract String say();
}
 class China extends WorldOrganization{
    String GREETINGS="你好,恭喜发财";
    @Override
    public String say(){return GREETINGS;}
}

class USA extends WorldOrganization{}
class England extends WorldOrganization{}
class UN extends WorldOrganization{
    private ArrayList countryList;
    private String saying="";
    public UN(){
        countryList=new ArrayList();
        countryList.add(new China());
        countryList.add(new USA());
        countryList.add(new England());
    }
    
    public void add(WorldOrganization country){
        if(country!=null)
           countryList.add(country);
    }
    public void remove(WorldOrganization country){
        if(country!=null)
            countryList.remove(country);
    }
    public Iterator elements(){
        return countryList.iterator();
    }
    public String say(){
        int i;
        for(i=0;i

模式的优点

组合模式包含了基本对象和组合对象,基本对象可以被组合成更复杂的组合对象,组合对象也可以被组合,如UN类由基本对象China、USA、England组合而成。

使用组合模式时,客户类一致地使用组合机构和单个对象。

新定义的组合类或子类自动与已有的结构和客户代码一起工作,程序不用因此改变。


模式的不足

不容易限制组合中的构件,当构件的约束变多时,组合在一起的难度增加。


你可能感兴趣的:(Java,设计模式)