• 设计模式-组合模式


    前言

    点击查看:设计模式系列

    组合模式(Composite)

    定义:将对象组合成树形结构,表示层次结构关系,并且让对象能够以同样的方式呈现给客户端程序。

    举例:

    家族谱的编写:

    男性:可传宗接代,也有权利把一些人剔除族谱。

    女性:记录到家谱中,但不能传宗接代。

    理解:每一个小家庭中,爸爸妈妈和我,都是爸爸做主,可踢出我跟妈妈中的任何一个,也可增加任何一个。组件模式中的组件可以是单独一个对象组成,也可以是多个组件组成(一个家庭,甚至一个家庭的多级延续);

    类图:

    族员共性代码:

       //// <summary>
        /// //族人 抽象出来的族人共性
        /// </summary>
        public abstract class Father
        {
            //族人的姓名
            protected string name = string.Empty;
            public string Name
            {
                get
                {
                    return name;
                }
            }
    
            //增加后代
            public abstract void Add(Father boy);
            //逐出家谱
            public abstract void Remove(Father boy);
    
            //定义所有族人,做个简介
            public abstract void Intro();
        }

    家族成员代码

     //男性后代
        public class Boy : Father
        {
            //构造函数
            public Boy() { }
            public Boy(string Name)
            {
                this.name = Name;
            }
    
            List<Father> myFamily = new List<Father>();
    
            //自我简介
            public override void Intro()
            {
                Console.WriteLine("我是:{0};", Name);
                foreach (Father f in myFamily)
                {
                    f.Intro();
                }
            }
    
            //增加后代
            public override void Add(Father boy)
            {
                myFamily.Add(boy);
            }
    
            //逐出家谱
            public override void Remove(Father boy)
            {
                myFamily.Remove(boy);
            }
        }
    
        //女性后代 
        public class Gril : Father
        {
            //构造函数
            public Gril() { }
            public Gril(string Name)
            {
                this.name = Name;
            }
            //自我简介
            public override void Intro()
            {
                Console.WriteLine("我是:{0};", Name);
            }
            //不能添加
            public override void Add(Father store)
            {
                throw new NotImplementedException();
            }
            //不能删除
            public override void Remove(Father store)
            {
                throw new NotImplementedException();
            }
        }

    客户端代码:

           public static void Main()
            {
                //爷爷取老婆
                Boy yeye = new Boy("爷爷");
                Gril nainai = new Gril("奶奶");
                yeye.Add(nainai);
    
                //爷爷要孩子
                Boy baba = new Boy("爸爸");
                Gril gugu = new Gril("姑姑");            
                yeye.Add(gugu);
                yeye.Add(baba);
    
                //爸爸要我
                Boy me = new Boy("me");
                baba.Add(me);
    
                //我要孩子
                Boy son = new Boy("son");
                me.Add(son);
    
                //爷爷的大家庭,族谱做介绍
                yeye.Intro();
    
                Console.Read();
            }

    组合模式总结

    有组合模式的案例可知:客户端代码,很容易组建层次结构,并且层次分明,同时又很容易遍历所有的组件集合。但要注意理解组合模式中的节点与页,节点可删可加,页则不能增删。

    大家都好好理解,消化下这个模式,想想都那里,那种情况下能使这个模式的特性发挥的淋漓尽职。

    欢迎加入博客左上方群,交流探讨,设计模式,数据库,c#.net,数据结构。

  • 相关阅读:
    Python基础之内存管理与垃圾回收机制
    Git常用命令
    Git分支操作
    码云配置SSH公钥
    Git基本操作
    Git基本理论
    版本控制
    Python基础之Python语法
    成为一名JAVA高级工程师你需要学什么【转】
    一个java高级工程师的进阶之路【转】
  • 原文地址:https://www.cnblogs.com/knowledgesea/p/3940089.html
Copyright © 2020-2023  润新知