科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件无废话C#设计模式之十一:Composite

无废话C#设计模式之十一:Composite

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本系列文章将向大家介绍一下C#的设计模式,此为第十一篇文章,相信对大家会有所帮助的。废话不多说,继续来看。

作者:LoveCherry 来源:博客园 2007年12月4日

关键字: C# 设计模式 Composite

  • 评论
  • 分享微博
  • 分享邮件
±¾ÏµÁÐÎÄÕ½«Ïò´ó¼Ò½éÉÜÒ»ÏÂC#µÄÉè¼Æģʽ£¬´ËΪµÚʮһƪÎÄÕ£¬ÏàÐŶԴó¼Ò»áÓÐËù°ïÖúµÄ¡£·Ï»°²»¶à˵£¬¼ÌÐøÀ´¿´¡£

¡¡¡¡Òâͼ

¡¡¡¡½«¶ÔÏó×éºÏ³ÉÊ÷ÐνṹÒÔ±íʾ¡°²¿·Ö-ÕûÌ塱µÄ²ã´Î½á¹¹¡£CompositeģʽʹµÃÓû§¶Ôµ¥¸ö¶ÔÏóºÍ×éºÏ¶ÔÏóµÄʹÓþßÓÐÒ»ÖÂÐÔ¡£

¡¡¡¡³¡¾°

¡¡¡¡ÎÒÃÇÖªµÀ£¬Ò»¸öÍøÂçÓÎϷͨ³£»áÓжà¸öÓÎÏ·´óÇø¡£Ã¿Ò»¸öÓÎÏ·´óÇø»áÓкܶàÓÎÏ··þÎñÆ÷(Ò»¸öÓÎÏ·´óÇø¾ÍÊÇÒ»×éÓÎÏ··þÎñÆ÷)¡£Ã¿Ò»¸öÓÎÏ··þÎñÆ÷ÉÏ»áÓв»Í¬µÄ·þÎñ(¿ÉÒÔÊǶà¸ö·þÎñ)¡£ÕâÊÇÒ»¸öÃ÷ÏԵIJ¿·Ö-ÕûÌå¹Øϵ£¬¼ÙÉèÎÒÃÇÏÖÔÚÐèÒªÖÆ×÷Ò»¸ö·þÎñÆ÷¹ÜÀí¹¤¾ß£¬ÓÃÓÚÏÔʾËùÓдóÇø¡¢·þÎñÆ÷ÒÔ¼°·þÎñµÄÐÅÏ¢£¬²¢ÇÒÄÜ¿ªÆôÕâЩ·þÎñ(¿ÉÒÔÊǵ¥¶À¿ªÆôÒ»¸ö·þÎñ£¬Ò²¿ÉÒÔÊÇ¿ªÆôÕû¸ö·þÎñÆ÷ÉϵÄËùÓзþÎñ£¬Ò²¿ÉÒÔÊÇ¿ªÆôÕû¸ö´óÇøµÄËùÓзþÎñ)¡£

¡¡¡¡¿ÉÒÔ¿´µ½£¬ÓÎÏ··þÎñÆ÷ºÍÓÎÏ·´óÇø¶¼ÊÇÒ»¸ö×éºÏ¶ÔÏ󣬶øÓÎÏ··þÎñÊÇ×îµ×²ãµÄ½Úµã¡£¿Í»§¶ËÔÚ¿ªÆôÒ»¸öÓÎÏ·´óÇø·þÎñµÄʱºò£¬±ØÐëºÍÓÎÏ··þÎñÆ÷ÒÔ¼°ÓÎÏ··þÎñ½øÐÐÒÀÀµ£¬¶øÔÚ¿ªÆôÓÎÏ··þÎñÆ÷ÉÏËùÓзþÎñµÄʱºò£¬±ØÐëºÍÓÎÏ··þÎñ½øÐÐÒÀÀµ¡£ÊÔÏëһϣ¬Èç¹ûÒ»¸ö¹«Ë¾µÄ×ܲÃÔÚ¹ÜÀíÉϲ»µ«ÐèÒªºÍ¸÷×ܼàÒÔ¼°¾­Àí½øÐйµÍ¨£¬»¹Óк͵ײãµÄÔ±¹¤¹µÍ¨£¬ÄÇô×ܲÃÊDz»ÊÇ»á̫æµÁËÒ»µã?ÓÉ´Ë£¬ÎÒÃÇÒýÈë×éºÏģʽ£¬Ê¹×éºÏ¶ÔÏóºÍµ¥¸ö¶ÔÏó¾ßÓÐÒ»ÑùµÄ±íÏÖÐÎʽ¡£

¡¡¡¡Ê¾Àý´úÂë

ÒÔÏÂÊÇÒýÓÃƬ¶Î£º
¡¡¡¡using System;
¡¡¡¡using System.Collections.Generic;
¡¡¡¡using System.Text;
¡¡¡¡namespace CompositeExample
¡¡¡¡{
¡¡¡¡class Program
¡¡¡¡{
¡¡¡¡static void Main(string[] args)
¡¡¡¡{
¡¡¡¡Element server1 = new GameServer("GS1", "192.168.0.1");
¡¡¡¡server1.Add(new GameService("Lobby1", 1, "S5Lobby1"));
¡¡¡¡server1.Add(new GameService("Gate1", 2, "S5Gate1"));
¡¡¡¡server1.Add(new GameService("DataExchange1", 3, "S5DataExchange1"));
¡¡¡¡server1.Add(new GameService("Rank1", 4, "S5Rank1"));
¡¡¡¡server1.Add(new GameService("Log1", 5, "S5Log1"));
¡¡¡¡Element server2 = new GameServer("GS2", "192.168.0.2");
¡¡¡¡server2.Add(new GameService("Lobby2", 1, "S5Lobby2"));
¡¡¡¡server2.Add(new GameService("Gate2", 2, "S5Gate2"));
¡¡¡¡server2.Add(new GameService("DataExchange2", 3, "S5DataExchange1"));
¡¡¡¡server2.Add(new GameService("Rank2", 4, "S5Rank2"));
¡¡¡¡server2.Add(new GameService("Log2", 5, "S5Log2"));
¡¡¡¡Element area = new GameArea("µçÐÅÇø");
¡¡¡¡area.Add(server1);
¡¡¡¡area.Add(server2);
¡¡¡¡area.Display();
¡¡¡¡area.Start();
¡¡¡¡area.Stop();
¡¡¡¡}
¡¡¡¡}
¡¡¡¡abstract class Element
¡¡¡¡{
¡¡¡¡protected string name;
¡¡¡¡public Element(string name)
¡¡¡¡{
¡¡¡¡this.name = name;
¡¡¡¡}
¡¡¡¡public abstract void Add(Element element);
¡¡¡¡public abstract void Remove(Element element);
¡¡¡¡public abstract void Display();
¡¡¡¡public abstract void Start();
¡¡¡¡public abstract void Stop();
¡¡¡¡}
¡¡¡¡class GameService : Element, IComparable
¡¡¡¡{
¡¡¡¡private int serviceType;
¡¡¡¡private string serviceName;
¡¡¡¡public GameService(string name, int serviceType, string serviceName)
¡¡¡¡: base (name)
¡¡¡¡{
¡¡¡¡this.serviceName = serviceName;
¡¡¡¡this.serviceType = serviceType;
¡¡¡¡}
¡¡¡¡public override void Add(Element element)
¡¡¡¡{
¡¡¡¡throw new ApplicationException("xxx");
¡¡¡¡}
¡¡¡¡public override void Remove(Element element)
¡¡¡¡{
¡¡¡¡throw new ApplicationException("xxx");
¡¡¡¡}
¡¡¡¡public override void Display()
¡¡¡¡{
¡¡¡¡Console.WriteLine(string.Format("name:{0},serviceType:{1},serviceName:{2}", name, serviceType, serviceName));
¡¡¡¡}
¡¡¡¡public override void Start()
¡¡¡¡{
¡¡¡¡Console.WriteLine(string.Format("{0} started", name));
¡¡¡¡}
¡¡¡¡public override void Stop()
¡¡¡¡{
¡¡¡¡Console.WriteLine(string.Format("{0} stopped", name));
¡¡¡¡}
¡¡¡¡public int CompareTo(GameService other)
¡¡¡¡{
¡¡¡¡return other.serviceType.CompareTo(serviceType);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡class GameServer : Element
¡¡¡¡{
¡¡¡¡private string serverIP;
¡¡¡¡private List serviceList = new List();
¡¡¡¡public GameServer(string name, string serverIP)
¡¡¡¡: base(name)
¡¡¡¡{
¡¡¡¡this.serverIP = serverIP;
¡¡¡¡}

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章