菜鸟也疯狂之组合模式

菜鸟也疯狂之组合模式

组合设计模式实际上讲的是某种结构,当程序中的对象与对象之间的关系满足如下即将要阐述的树形结构时,那么就可以尝试s用组合模式来设计程序框架。 我们先代码走起,结尾加 在以解释...

 /// <summary>
    /// 物件抽象类,
    /// </summary>
    public abstract class MyObj
    {
        public string Name { get; set; }
        public MyObj(string name)
        {
            this.Name = name;
        }

        public abstract void PrintName();
        public abstract void Add(MyObj g);
        public abstract void Remove(MyObj g);
    }

    /// <summary>
    /// 灯泡物件
    /// </summary>
    public class Bulb : MyObj
    {
        public Bulb(string name)
            : base(name)
        { }

        public override void PrintName()
        {
            Debug.Log("这是:" + Name);
        }

        
        public override void Add(MyObj g)
        {
            
        }
        public override void Remove(MyObj g)
        {

        }
    }


    /// <summary>
    /// 针
    /// </summary>
    public class Needle : MyObj
    {
        public Needle(string name)
            : base(name)
        { }

        public override void PrintName()
        {
            Debug.Log("这是:" + Name);
        }

        public override void Add(MyObj g)
        {

        }
        public override void Remove(MyObj g)
        {

        }
    }



    /// <summary>
    /// 纸盒
    /// </summary>
    public class PaperBox : MyObj
    {
        private List<MyObj> list = new List<MyObj>();

        public PaperBox(string name)
            : base(name)
        { }

        public override void PrintName()
        {
            foreach (MyObj f in list)
            {
                f.PrintName();
            }

            Debug.Log("这是:" + Name);
        }

        public override void Add(MyObj g)
        {
            list.Add(g);
        }
        public override void Remove(MyObj g)
        {
            list.Remove(g);
        }
    }
    
 void Start()
        {
            MyObj bulb = new Bulb("红色的灯泡");
            MyObj box = new PaperBox("纸盒1");
            box.Add(bulb);
            box.PrintName();

            MyObj box2 = new PaperBox("纸盒2");
            box2.Add(box);
            MyObj needle = new Needle("用于缝补的针");
            box2.Add(needle);
            box2.PrintName();
        }

上述示例代码实现了类似如下图所示的树形结构,在这里,针和灯泡属于简单对象,纸盒属于复杂对象,复杂对象是由一个或者多个简单对象组合而成,然而,如何能够在客户端以相同的方式来处理简单类型和复杂类型的对象(客户端使用box2对象来统一处理box对象和needle对象,它不因为box是负责对象而额外做处理),这个就是组合模式的职责所在。所以说,组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。

组合模式图解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值