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<LobbyServer> serverList = new List<LobbyServer>();
private static volatile LoadBalanceServer lbs;
private static object syncLock = new object();
private 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<string> playerList = new List<string>();
public List<string> 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);
}
}
}
|
相关推荐
李建忠面向对象设计模式视频精讲:Singleton 单件(创建型模式)
C#视频-面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)
C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)
C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式) (Level 300)
完整的C#设计模式PDF版 C#设计模式(1) 4 一、 C# 面向对象程序设计复习 5 二、 设计模式举例 5 三、 先有鸡还是先有蛋? 7 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 8 五、 .net本质 9 C#设计模式(2) 11 一、 ...
C#设计模式(1) 一、 C# 面向对象程序设计复习 二、 设计模式举例 三、 先有鸡还是先有蛋? 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 五、 .net本质 C#设计模式(2) 一、 "开放-封闭"原则(OCP) 二、 ...
C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式) C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) C#面向...
C#设计模式(7)-Singleton Pattern C#设计模式(6)-Abstract Factory Pattern C#设计模式(5)-Factory Method Pattern C#设计模式(4)-Simple Factory Pattern C#设计模式(3) - 设计原则(2) C#设计模式(2...
C#面向对象设计模式纵横谈 第二课 Singleton 单件(创建型模式)
36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...
主要介绍了C#设计模式中的Singleton模式相关知识,文中代码非常详细,供大家理解学习,感兴趣的朋友可以了解下
C#设计模式(23种设计模式) 部分内容概述如下,下载可看全部哦!!! 还等什么呢?? 创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式...
单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge ...
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
解释器模式将描述怎样 在 有了一个简单的文法后, 使用模式设计解释这些语句。 在解释器模式里面提到的语言是指任 何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表 文法的命令类的等 级结构,也...
设计模式之Singleton(单态
C++设计模式课件12_Singleton_单件模式.pdf
设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享...
设计模式-Singleton与Factory