码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式_创建型模式_单例模式_案例

时间:2018-03-14 20:07:05      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:开发   ima   包含   sleep   删除   创建型模式   pattern   单例模式   sdn   

转载自:http://blog.csdn.net/lovelion  作者:刘伟

负载均衡器的设计与实现

技术分享图片

 

Sunny公司开发人员通过分析和权衡,决定使用单例模式来设计该负载均衡器,结构图如图3-3所示:

技术分享图片

在图中,将负载均衡器LoadBalancer设计为单例类,其中包含一个存储服务器信息的集合serverList,

每次在serverList中随机选择一台服务器来响应客户端的请求,实现代码如下所示:

LoadBalance:

 1 namespace SingletonPattern
 2 {
 3     /// <summary>
 4     /// 负载均衡器器(单例模式)
 5     /// </summary>
 6     public class LoadBalance
 7     {
 8         private static LoadBalance _instance = null; //保存当前类的唯一实例
 9         private List<String> ServerList = null; //服务器列表
10 
11         private LoadBalance()
12         {
13             ServerList = new List<string>();
14         }
15         //供外部调用,用于返回当前类的唯一实例
16         public static LoadBalance GetInstance()
17         {
18             if (_instance == null)
19             {
20                 _instance = new LoadBalance();
21             }
22             return _instance;
23         }
24 
25         //增加服务器
26         public void AddServer(string server)
27         {
28             ServerList.Add(server);
29         }
30 
31         //删除服务器
32         public void RemoveServer(string server)
33         {
34             ServerList.Remove(server);
35         }
36         //随机获取一个服务器,来实现负载均衡器
37         public String GetRandomServer()
38         {
39             if (ServerList.Count > 0)
40             {
41                 //使用随机数时,需要进行沿时,否则容易产生随机生成一堆相同的数据
42                 Thread.Sleep(10);
43                 Random random = new Random();
44                 int index = random.Next(0, ServerList.Count);
45                 return ServerList[index];
46             }
47             return null;
48         } 
49     }
50 }

Program:

 1 namespace SingletonPattern
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             //实例化四个对象进行测试
 8             LoadBalance balance1, balance2, balance3, balance4;
 9             balance1 = LoadBalance.GetInstance();
10             balance2 = LoadBalance.GetInstance();
11             balance3 = LoadBalance.GetInstance();
12             balance4 = LoadBalance.GetInstance();
13 
14             //判断下这四个对象是否是同一个对象?
15             //如果不相同,就违法了单例模式
16             //相同的话,就符合单例模式
17             if(balance1.Equals(balance2) || balance1.Equals(balance3) || balance1.Equals(balance4))
18                 Console.WriteLine("对象1与所有对象都相同,符合单例模式");
19             else
20                 Console.WriteLine("对象1与其它对象不相同,不符合单例模式");
21             
22             //增加服务器
23             balance1.AddServer("服务器1:127.0.0.1");
24             balance1.AddServer("服务器2:222,222,222,222");
25             balance1.AddServer("服务器3:333,333,333,333");
26             balance1.AddServer("服务器4:444,444,444,444");
27 
28             //模拟客户端请求的分发,随机获取一个服务器
29             for (int i = 0; i < 10; i++)
30             {
31                 Console.WriteLine("分发请求:" + balance1.GetRandomServer());
32             }
33             Console.Read();
34         }
35     }
36 }

输出结果:

技术分享图片

 

设计模式_创建型模式_单例模式_案例

标签:开发   ima   包含   sleep   删除   创建型模式   pattern   单例模式   sdn   

原文地址:https://www.cnblogs.com/fzxiaoyi/p/8569654.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!