组合模式的介绍

目录

定义:

生活中的例子:

实例:

 透明组合模式:

 安全组合模式:

定义:

组合模式:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。

组合模式让客户端可以统一对待单个对象和组合对象。

生活中的例子:

 

 

 

 Component(抽象构件)

Leaf(叶子构件)

Composite(容器构件)

 

public abstract class Component {
    public abstract void add(Component c); //增加成员
    public abstract void remove(Component c); //删除成员
    public abstract Component getChild(int i); //获取成员
    public abstract void operation();  //业务方法
}


public class Leaf extends Component {
    public void add(Component c) { 
        //异常处理或错误提示
    }	
		
    public void remove(Component c) { 
        //异常处理或错误提示
    }
	
    public Component getChild(int i) { 
        //异常处理或错误提示
        return null; 
    }
	
    public void operation() {
        //叶子构件具体业务方法的实现
    } 
}


public class Composite extends Component {
    private ArrayList<Component> list = new ArrayList<Component>();
	
    public void add(Component c) {
        list.add(c);
    }
	
    public void remove(Component c) {
        list.remove(c);
    }
	
    public Component getChild(int i) {
        return (Component)list.get(i);
    }
	
    public void operation() {
        //容器构件具体业务方法的实现,将递归调用成员构件的业务方法
        for(Object obj:list) {
            ((Component)obj).operation();
        }
    } 	
}

实例:

某软件公司欲开发一个杀毒(Antivirus)软件,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒。该杀毒软件还可以根据各类文件的特点,为不同类型的文件提供不同的杀毒方式,例如图像文件(ImageFile)和文本文件(TextFile)的杀毒方式就有所差异。 现使用组合模式来设计该杀毒软件的整体框架。

 透明组合模式:

  • 抽象构件Component中声明了所有用于管理成员对象的方法,包括add()、remove(),以及getChild()等方法  
  • 在客户端看来,叶子对象与容器对象所提供的方法是一致的,客户端可以一致地对待所有的对象  
  • 缺点是不够安全,因为叶子对象和容器对象在本质上是有区别的

 

 安全组合模式:

  •  抽象构件Component中没有声明任何用于管理成员对象的方法,而是在Composite类中声明并实现这些方法
  • 对于叶子对象,客户端不可能调用到这些方法 缺点是不够透明,客户端不能完全针对抽象编程,
  • 必须有区别地对待叶子构件和容器构件

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值