首  页 | 资讯中心 | 网络学院 | 天新汽车 | 天新手机 | 天新游戏 | 软件开发 | 考试认证
品 牌 机 | 笔 记 本 | 服 务 器 | 天新数码 - DC - DV - MP3 - MP4 - GPS - TV | 数字家庭
硬件 DIY - 主板 - CPU - 内 存 - 硬 盘 - 显示器 - 显卡 - 光驱 - 机箱 - 键鼠 - 网络设备
办公设备 | 打 印 机 | 扫 描 仪 | 投 影 仪 | 一 体 机 | 传 真 机 | 路 由 器 | 交 换 机
软件下载 | 驱动下载 | 游戏下载 | 源码下载 | 教程下载 | 站长在线 | 产品中心 | 报价中心
开发首页 | 开发语言 | .Net开发 | Java开发 | Web开发 | 数据库开发 | 移动开发 | 游戏开发 | 企业开发 | 操作系统 | 软件工程
VB VC Delphi PB BCB C++ - ASP.net C# VB.net - J2EE J2SE J2ME EJB - ASP PHP JSP CGI - MSSQL Oracle DB2 MySQL - CodingLife
  .Net开发首页 | ASP.NET | C# | VB.NET | VC++.NET | VS.NET | ADO.NET | Framework | Web Service | Remoting | .NET XML
  您现在的位置:天新网 > 软件开发 > .Net开发 > C#
无废话C#设计模式之十一:Composite
http://dev.21tx.com 2007年11月27日 博客园 LoveCherry

每日文章精萃
.Net:在.NET中定义结构设计标准 Java:Java 2 引用类使用指南(2)
ASP:Asp Object 之:QueryString PHP:PHP.MVC的模板标签系统之标签行为调
JSP:JSP程序员成长之路之二 CGI:用Perl制作留言本实例之二
VB:将VB源程序转换成HTML格式 VC:建立Visual C++基本应用程序

1 2 3 下一页

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

  意图

  将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。

  场景

  我们知道,一个网络游戏通常会有多个游戏大区。每一个游戏大区会有很多游戏服务器(一个游戏大区就是一组游戏服务器)。每一个游戏服务器上会有不同的服务(可以是多个服务)。这是一个明显的部分-整体关系,假设我们现在需要制作一个服务器管理工具,用于显示所有大区、服务器以及服务的信息,并且能开启这些服务(可以是单独开启一个服务,也可以是开启整个服务器上的所有服务,也可以是开启整个大区的所有服务)。

  可以看到,游戏服务器和游戏大区都是一个组合对象,而游戏服务是最底层的节点。客户端在开启一个游戏大区服务的时候,必须和游戏服务器以及游戏服务进行依赖,而在开启游戏服务器上所有服务的时候,必须和游戏服务进行依赖。试想一下,如果一个公司的总裁在管理上不但需要和各总监以及经理进行沟通,还有和底层的员工沟通,那么总裁是不是会太忙碌了一点?由此,我们引入组合模式,使组合对象和单个对象具有一样的表现形式。

  示例代码

  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;
  }

上一篇: C# Mines(布雷) 代码
下一篇: C# 中的关键字之:base、this

1 2 3 下一页

编辑推荐
相关内容
·C#中的委托和事件
·Visual C# 2005实现控件中捕获按键
·用VC#2005解析含有多种格式的文本文件
·利用C#设计端口扫描器
·借用VB的My,C#照样条条大路通罗马
·C#箴言:使用构造函数初始化语句
·Visual C#编程入门之语句
·初探c#(十二)名字空间(Namespaces)
·C#, 是宣传还是有用的技术?
·C#锐利体验(二)
·Java、C#泛型的一些个人看法
·C#中的两个+(plus)操作符解析
·通过 C# 简化 APM
·C#之 VS2008 之 Extension Methods
·关于C#静态构造函数的几点说明
·使用c#捕获windows的关机事件
·关于C#代码实现ControlTemplate
·C#2.0纯数学方法递归实现货币数字转换中文
·深入理解C# 3.0的五项主要改进
·Visual C# 2.0匿名方法揭密
最近更新
人气最热
·无废话C#设计模式之十:Flyweight
·C#中如何调用Delphi写的Dll
·C#分部方法(Partial Method)讨论
·一个用C#过滤HTML代码的函数
·C# Mines(布雷) 代码
·C# 中的关键字之:base、this
·C#编程 忘记密码功能的实现方法
·如何使用C#进行Visio二次开发
·C# 中的常用正则表达式总结
·Java、C#泛型的一些个人看法
·详解Visual C#数据库编程
·Java、C#泛型的一些个人看法
·在.NET客户端程序中使用多线程
·浅析C#中的套接字编程
·C#中的委托和事件
·用C#实现启动另一程序的方法
·C#开发终端式短信的原理和方法
·用Visual C#实现P2P应用程序
·C#学习之类的访问修饰符
·用C#制作图片格式转化器

 
·[硬件]微软Remote键盘专为XP MediaCenter打造
·[数码]奢侈到家了 18K黄金iPod Shuffle现身
·[汽车]Quattro版性能钢炮!--试驾奥迪S3 2.0T
·[开发]一个VB+PHP+Nusoap的乱码问题
·[资讯]甲骨文收购数据库开发商Innobase
·[游戏]天堂2:霸主没长大(托儿所)
·[本本]笔记本密码设置知识一点通
·[办公]C67功成身退!告诉你一个真实的爱普生M
·[手机]貌似贵族的平民手机三星C128卖495
·[考试]辽宁:沈阳市高考申请照顾录取开始资格
·[学院]办公高手:XLS与MDB文件格式互相转换
·[娱乐]血腥雨林
 

关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
© 晨新科技 版权所有 Created by TXSite.net