码迷,mamicode.com
首页 > 其他好文 > 详细

组合模式

时间:2014-05-12 09:36:47      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   tar   c   

模式动机:使用户可以一致性的处理整个树形结构或者树形的一部分;使用户在使用时无需对他们进行区分,可以一致的对待容器对象和叶子对象.

定义:组合多个对象形成树形结构以表示具有 部分-整体 关系的层次结构.组合模式让客户端可以统一对待单个对象和组合对象.

结构型模式

 组合模式结构图

bubuko.com,布布扣

结构成员:

  抽象构件(Component) 为叶子对象和容器对象声明接口. 这样使客户端可以统一对待这两个对象. 定义了叶子构件和容器构件的行为.

  叶子构件(Leaf) 表示叶子节点对象,叶子节点没有子节点,它实现了在抽象构件中定义的行为.

  容器构件(Composite) 维护了一个抽象构件的集合, 使得容器对象既可以包含容器节点,也可以包含叶子节点. 并且实现了抽象构件中定义的操作成员的方法. 它的操作方法可以递归调用叶子节点的实现方法.

 

组合模式根据是否将容器构件特有的方法在抽象构件中声明又分为 透明组合模式 和 安全组合模式:

  这两种组合模式优缺点正好相反, 透明组合模式的好处:抽象构件中声明了所有用于管理成员对象的方法,确保了所有对象都有相同的接口,客户端可以不用区别对待.

缺点:不够安全,叶子节点不应该有的行为也会有.       

 

实现:

抽象构件

bubuko.com,布布扣
abstract class Component
{
   public abstract  void Add(Component c);  //增加成员
   public abstract  void Remove(Component c); //删除成员
   public abstract  Component GetChild(Component c); //获取成员
    public abstract  void Operation();   //业务方法
}
View Code

叶子构件

bubuko.com,布布扣
class Leaf : Component
{
   public override void Add(Component c)
     {
                           //异常处理或提示
      }

     public override void Remove(Component c)
     {
                           //异常处理或提示
      }
     
      public override Component GetChild(int i)
     {
                           //异常处理或提示
                        return null;
      }
     
     public override void Operation()
     {
                        //叶子构件具体实现方法
              
      }
}
View Code

容器构件

bubuko.com,布布扣
class Composite : Component
{
   private List<Component> list = new List <Component>();

    public override void Add(Component c)
       {
            list.Add(c);
       }

    public override void Remove(Component c)
       {
            list.Remove(c);
       }

     public override Component GetComponent(int i)
       {
           return (Component)list[i];
       }

       public override void Operation()
       {
            foreach(Object obj in list)
                 {
                    ((Component)obj).Operation();
                 }
       }
}
View Code

 

 

 

 

组合模式,布布扣,bubuko.com

组合模式

标签:style   blog   class   code   tar   c   

原文地址:http://www.cnblogs.com/zhangxs/p/3710410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!