All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
AJAX进度条_[AJAX教程]
微软.Net开发中的多线程编程总结_[Asp.Net教程]
delphi高级vcl组件状态栏组件(TStatusBar)使用实例
Sqlserver中一些Select检索高级用法_[SQL,Server教程]
ASP.NET编程经验技巧10则_[Asp.Net教程]
C#,3.0新特征之创建和初始化集合对象_[Asp.Net教程]
ASP.Net,2.0,发送邮件的代码_.net资料_编程技术
Asp.net2.0实现Word转换Html,同时分享系列笑话_[Asp.Net教程]
鼠标移过Div层显示层中信息由数据库中提出_[Asp.Net教程]
关于ASP.NET页面打印技术的总结_.net资料_编程技术
Reading number is top 10 pictures
Chinese paper-cut grilles art appreciation7
Fan bingbing black wings for platform and DanLuoWang believes beauty1
美女浴室写真2
接财神,大吉大利,财源滚滚来
The money of more than 100 countries and regions5
BingBingFan apple dew point photo gallery1
两张抽象画
全身蕾丝丝质美臀
一千块钱如何创业
如果没有好报,为什么要做好人?
Download software ranking
Boxer vs Yellow5
Tram sex maniac 2 (H) rar bag14
WebService在.NET中的实战应用教学视频 → 第3集
C语言教程TXT
Visual C++界面编程技术
jBuilder2006
Prostitutes diary
jdk1.5
Unix video tutorial8
Tram sex maniac 2 (H) rar bag7
aaa published in(发表于) 2013/12/18 8:20:14 Edit(编辑)
无废话C#设计模式之二:Singleton_.net资料_编程技术

无废话C#设计模式之二:Singleton_.net资料_编程技术

无废话C#设计模式之二:Singleton_.net资料_编程技术-你的首页-uuhomepage.com

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


  意图


  保证一个类只有一个实例,并提供访问它的全局访问点。


  场景


  我们现在要做一个网络游戏的服务端程序,需要考虑怎么样才能承载大量的用户。在做WEB程序的时候有各种负载均衡的方案,不管是通过硬件实现还是软件实现,基本的思想就是有一个统一的入口,然后由它来分配用户到各个服务器上去。


  需要考虑的问题是,即使在多线程的并发状态下,用户只能通过一个唯一的入口来分配,由此引入了Singleton模式来实现这个唯一的入口。


  示例代码



  using System;
  using System.Collections.Generic;
  using System.Threading;
  namespace SingletonExample
  {
  class Program
  {
  static void Main(string[] args)
  {
  ParameterizedThreadStart ts = new ParameterizedThreadStart(EnterPlayer);
  for (int i = 0; i < 20; i++)
  {
  Thread t = new Thread(ts);
  t.Start("player" + i);
  }
  LoadBalanceServer.GetLoadBalanceServer().ShowServerInfo();
  }
  static void EnterPlayer(object playerName)
  {
  LoadBalanceServer lbs = LoadBalanceServer.GetLoadBalanceServer();
  lbs.GetLobbyServer().EnterPlayer(playerName.ToString());
  }
  }
  class LoadBalanceServer
  {
  private const int SERVER_COUNT = 3;
  private List serverList = new List();
  private static volatile LoadBalanceServer lbs;
  private static object syncLock = new object();
  public LoadBalanceServer()
  {
  for (int i = 0; i < SERVER_COUNT; i++)
  {
  serverList.Add(new LobbyServer("LobbyServer" + i));
  }
  }
  public static LoadBalanceServer GetLoadBalanceServer()
  {
  if (lbs == null)
  {
  lock (syncLock)
  {
  if (lbs == null)
  {
  Thread.Sleep(100);
  lbs = new LoadBalanceServer();
  }
  }
  }
  return lbs;
  }
  public LobbyServer GetLobbyServer()
  {
  LobbyServer ls = serverList[0];
  for (int i = 1; i < SERVER_COUNT; i++)
  {
  if (serverList[i].PlayerList.Count < ls.PlayerList.Count)
  ls = serverList[i];
  }
  return ls;
  }
  public void ShowServerInfo()
  {
  foreach (LobbyServer ls in serverList)
  {
  Console.WriteLine("=================" + ls.ServerName + "=================");
  foreach (string player in ls.PlayerList)
  {
  Console.WriteLine(player);
  }
  }
  }
  }
  class LobbyServer
  {
  private List playerList = new List();
  public List PlayerList
  {
  get { return playerList; }
  }
  private string serverName;
  public string ServerName
  {
  get { return serverName; }
  }
  public LobbyServer(string serverName)
  {
  this.serverName = serverName;
  }
  public void EnterPlayer(string playerName)
  {
  playerList.Add(playerName);
  }
  }
  }



添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.