zoukankan      html  css  js  c++  java
  • C#设计模式:组合模式(Composite Pattern)

    一,C#设计模式:组合模式(Composite Pattern)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _9.组合模式
    {
        //组合模式主要用来处理一类具有“容器特征”的对象——即它们在充当对象的同时,又可以作为容器包含其他多个对象。
        //组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性
        class Program
        {
            static void Main(string[] args)
            {
                People p = new People("开始");    //定义一个根容器
                Chinese e = new Chinese("中国人");
                p.Add(e);   // 为容器添加节点
    
                Usa e1 = new Usa("美国人");
                p.Add(e1);  // 为容器添加节点
    
                People p2 = new People("地球人");    //定义一个容器,理解为装在根容器中
                p2.Add(e);  // 为容器添加节点
                p2.Add(e1); // 为容器添加节点
    
                People p3 = new People("地球人");   //定义一个容器,理解为装在P2容器中
                p3.Add(e);  // 为容器添加节点
                p3.Add(e1); // 为容器添加节点
                p2.Add(p3); // 为容器添加节点
    
                p.Add(p2);  // 为容器添加节点
                p.Say(1);   // 展示所有节点
            }
        }
    
        public abstract class Event
        {
            public abstract void Say(int a);
        }
    
        public class Chinese : Event
        {
            public string Name { get; set; }
            public Chinese(string name)
            {
                Name = name;
            }
            public override void Say(int a)
            {
                Console.WriteLine(new String('-', a) + Name + ":我们说中文");
            }
        }
        public class Usa : Event
        {
            public string Name { get; set; }
            public Usa(string name)
            {
                Name = name;
            }
            public override void Say(int a)
            {
                Console.WriteLine(new String('-', a) + Name + ":我们说英文");
            }
        }
    
        public class People : Event           //People是一个对象也是一个容器,将我们要的组合装起来
        {
            List<Event> list = new List<Event>();//定义可以存储节点的集合
            public string Name { get; set; }
            public People(string name)
            {
                Name = name;
            }
            public override void Say(int a)
            {
                Console.WriteLine(new String('-', a) + Name);
                foreach (var item in list)
                {
                    item.Say(a + 2);
                }
            }
    
            public void Add(Event ev)
            {
                list.Add(ev);
            }
            public void Remove(Event ev)
            {
                list.Remove(ev);
            }
        }
    }

     二,我们看看输出结果:

    1》在上述代码中我们添加了三个容器如开始,地球人和地球人,这样我们就有四层结构的树形集合,当我们要执行这么复杂的结构,我们只需要添加一个people容器,这个容器中有节点,而此时节点可以无限添加,若我们需要多层级结构是,我们字需要在节点添加一个people容器,这样我们就可以实现无限级的复杂结构

    2》当然我们如果只需要使用两级,我们也是可以只往容器添加节点即可。例如:每一个人种都要说话,但是我们有N个人种,这时我们不可能每一个人种对象都实例一次,这时我们可以使用这个组合模式,我们将每个人种都添加到容器中,这时我们将N个人种添加到容器里了,我们只需要调用people容器的Say的方法即可将所有人的说话事件都实现了

  • 相关阅读:
    Hibernate中的一对一注解配置
    Hibernate=====HQL实用技术
    Hibernate中的session的线程安全问题
    初学orcale(一)
    initBinder转换日期格式
    poi学习
    jqueryUI学习
    JavaScript中node的相关属性
    JavaScript函数的调用(通过节点)--JavaScript DOM编程艺术
    DOM中的四种方法--Javascript DOM编程艺术
  • 原文地址:https://www.cnblogs.com/May-day/p/8615194.html
Copyright © 2011-2022 走看看