关键词:
转载自: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
输出结果:
设计模式-创建型模式_7种单例模式实现(代码片段)
文章目录创建型模式概述Case7种单例模式实现静态类使⽤懒汉模式(线程不安全)懒汉模式(线程安全)饿汉模式(线程安全)使⽤类的内部类(线程安全)双重锁校验(线程安全)CAS「AtomicReference」(线程安全)EffectiveJava作者推荐的枚举单例(... 查看详情
设计模式_创建型模式_简单工厂模式_案例(代码片段)
使用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnSupportedShapeException。 结构图如下... 查看详情
设计模式_单例模式(代码片段)
...2.对象模式:对象之间的动态关系,运行在内存之间。3.设计模式(1)单例模式动机:Motivation.保证在系统中,只有一个实例,才能保证逻辑正 查看详情
设计模式创建型设计模式(代码片段)
设计模式(一)创建型设计模式创建型设计模式:作用于对象的创建,将对象的创建与使用分离一、单例设计模式用途:保证该类在系统之中只有一个实例,用以确保运行逻辑的正确性与使用效率。饿汉单例模式(在没有调用之... 查看详情
设计模式-创建型模式_7种单例模式实现(代码片段)
...⼀个实例,并提供⼀个访问它的全局访问点。概述在设计模式中按照不同的处理⽅式共包含三⼤类:创建型模式结构型模式⾏为模式其中创建型模式⽬前已经搞了其中的四个:⼯⼚⽅法模式抽象⼯⼚模式建造者模式原... 查看详情
设计模式-创建型(代码片段)
设计模式-创建型创建型设计模式包含:单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式单例模式单例模式在开发中也是最常见的一种设计模式之一,系统原生提供的很多类的设计都采用了单例模式,... 查看详情
单例模式(代码片段)
classPeople(object):"""单类模式"""__instance=None#创建变量引用创建的实例对象def__new__(cls,*args,**kwargs):ifcls.__instance==None:cls.__instance=object.__new__(cls)#创建对象并赋值给这个对象的引用returncls.__instancedef__init__(self, 查看详情
设计模式_创建型模式_原型模式(代码片段)
转载自:http://blog.csdn.net/lovelion 作者:刘伟 原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。 原型模式的工作原理很简单:将... 查看详情
扎实基础_设计模式_创建型_原型模式(代码片段)
创建型模式就是前面大佬总结出 对象的创建如何合理利用 最后得出来的一些解决方案比如现在有一个学生对象,我们实例化它的时候要两秒钟(前面代码是类,后面代码放在 staticvoidMain(string[]args)里面执行)publicclassStud... 查看详情
python面向对象之单例模式(代码片段)
单例设计模式设计模式设计模式是前人工作的总结和提炼,通常,被人们广为流传的设计模式都是针对某一特定问题的成熟的解决方案;使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性;单例模式... 查看详情
单例模式(代码片段)
转载自大神http://www.cnblogs.com/vipchenwei/p/7121720.html 简单来说就是一个类只能创建唯一的实例 classSingleton(object):__instance=Nonedef__init__(self):passdef__new__(cls,*args,**kwargs):ifnotSingleton.__instance: 查看详情
python:设计模式介绍--单例模式(代码片段)
单例模式1、单例是只有一个实例2、通过静态字段+静态字段伪造出一个单例效果3、什么时候用:当所有实例中封装的数据相同时,创建单例模式(eg:连接池)用单例模式创建连接池:classCP:__instance=Nonedef__init__(self):self.ip="1.1.1.1... 查看详情
设计模式-创建型模式_原型模式(代码片段)
文章目录创建型模式概述Case场景模拟⼯程BadImplBetterImpl(原型模式重构代码)小结创建型模式创建型模式提供创建对象的机制,能够提升已有代码的灵活性和可复⽤性。类型实现要点工厂方法定义⼀个创建对象的接⼝... 查看详情
设计模式-创建型模式_原型模式(代码片段)
文章目录创建型模式概述Case场景模拟⼯程BadImplBetterImpl(原型模式重构代码)小结创建型模式创建型模式提供创建对象的机制,能够提升已有代码的灵活性和可复⽤性。类型实现要点工厂方法定义⼀个创建对象的接⼝... 查看详情
chatgpt教你设计模式[3]——创建型模式(单例模式建造者模式和原型模式)(代码片段)
...0c;并通过示例代码加深理解。本篇博客将带你进一步探究设计模式的魅力,并让你学会在软件设计中如何使用这三种模式。请持续关注我们的博客,一起深入探索设计模式的精髓。2.单例模式单例模式是一种创建型设计模... 查看详情
设计模式-创建型模式_工厂方法模式(代码片段)
文章目录创建型模式概述CaseBadImplBetterImpl(⼯⼚模式优化代码)接口定义实现奖品发放接⼝创建商店⼯⼚单元测试小结创建型模式创建型模式提供创建对象的机制,能够提升已有代码的灵活性和可复⽤性。类型实现要... 查看详情
设计模式-创建型模式_工厂方法模式(代码片段)
文章目录创建型模式概述CaseBadImplBetterImpl(⼯⼚模式优化代码)接口定义实现奖品发放接⼝创建商店⼯⼚单元测试小结创建型模式创建型模式提供创建对象的机制,能够提升已有代码的灵活性和可复⽤性。类型实现要... 查看详情
进阶12自学笔记python单例模式实现的几种方式(代码片段)
一、单例模式定义单例模式是一种常用的创建型设计模式,它保证一个类只有一个实例,并提供一个全局的访问点。二、实例展示实例1:classSingleton:_instance=Nonedef__new__(cls):ifcls._instanceisNone:cls._instance=super().__new__(cls)returncls._instanc... 查看详情