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

转载自: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 }

输出结果:

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

时间: 2024-10-12 13:17:47

设计模式_创建型模式_单例模式_案例的相关文章

【设计模式】创建型模式之单例模式(三)

单例模式 单例模式,是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中,应用该模式的一个类只有一个实例.即一个类只有一个对象实例. 简单的理解:保证这一个类仅有一个实例,并提供一个访问它的全局访问点. 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是,让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法. 实现思路 将该类的构造方法定义为私有方法,这样其

Python版设计模式: 创建型模式:单例模式和工厂模式家族

一. 单例模式(Singleton) 所谓单例模式,也就是说不管什么时候都要确保只有一个对象实例存在.很多情况下,整个系统中只需要存在一个对象,所有的信息都从这个对象获取,比如系统的配置对象,或者是线程池.这些场景下,就非常适合使用单例模式. 总结起来,就是说不管初始化一个对象多少次,真正干活的对象只会生成一次并且在首次生成. 用Python 实现单例模式的方法有很多,先来看第一种方式. # !/usr/bin/python3 # -*- coding:utf-8 -*- class singl

设计模式之创建型模式(上)

没有总结的学习不算学习,这一个月的学习可谓收获多多啊,接下来与大家分享一下. 一.设计模式的分类 总体来说设计模式分为三大类: 1.创建型模式,共五种. 2.结构型模式,共七种. 3.行为型模式,共十一种. 首先研究创建型模式 二. 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独 立于如何创建.组合和表示它的那些对象. 三. 为什么需要创建型模式 所有的创建型模式都有两个永恒的主旋律: 第一,它们都将系统使用哪些具体类的信息封装起来: 第二,它们隐藏了这些类的实例

设计模式 (创建型模式)

  设计模式 创建型模式 1.创建型模式         创建型模式,包括了5种设计模式,分别是 Singleton (单例模式),Factory(工厂模式),AbstractFactory(抽象工厂模式),Builder(创建者),Prototype(原型) ,创建型模式主要作用就是抽象了实例化过程.他们帮助一个系统独立于如何创建.组合和表示他的那些对象.一个类创建型模式使用继承改变被实例化的类.而一个对象创建型模式将实例化委托给另一个对象. 2.Singleton (单例模式)      单

创建型模式:单例模式

文章首发:创建型模式:单例模式 简介 姓名:单例模式 英文名:Singleton Pattern 价值观:我的生活我主宰(只允许自己实例化,不愿意被其他对象实例化) 个人介绍: Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.)(来自<设计模式之禅>) 这里的关注点有 3 个,分别是: 只有一个实例 自行实例化(也

设计模式系列 - 创建型模式

单例模式 懒汉式,线程不安全. 除非是单线程程序,否则不推荐使用. public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 饿汉式,线程安全 当程序总是使用这个

设计模式_创建型模式_简单工厂模式

转载自:http://blog.csdn.net/lovelion  作者:刘伟 简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:        首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类, 而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类: 然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方

设计模式_创建型模式

创建型模式与对象创建有关. 1. Abstract Factory (抽象工厂) 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用:一个系统要独立于它的产品的创建.组合和表示时. 与工厂模式的区别:工厂模式的一个工厂接口的子类只能实例化一个产品:抽象工厂能实例多个产品. 例子代码: package designModel; // 产品1 interface IProduct1 { } class Product1A implements IProduct1 { }

设计模式_创建型模式——工厂方法

工厂方法(Factory Method):工厂方法模式属于类的创建型模式.在工厂方法模式中,父类负责定义创建产品对象的工厂接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化哪一个类. abstract Product factoryMethod(String type) abstract:工厂方法是抽象的,依赖子类来处理对象的创建 Product:工厂方法返回一个产品,超类中定义的方法,通常使用到工厂方法的返回值 String:工厂方法

设计模式之创建型模式

一.前言 设计模式应该是在软件工程的背景下进行讨论的,而不是为了设计模式而论设计模式.设计模式是软件工程面向对象设计工作中一个抽象.归纳.总结的过程.软件设计的最高目标和最高准则就是易扩展,易复用,易维护, 灵活性高,高可用,稳定性高一切的设计原则和设计模式最终的目标都是向这个目标靠拢的. 二.面向对象设计六大原则 任何的设计模式都是基于面向对象的特性(抽象.封装.继承.多态)和设计原则进行设计和实现的,是面向对象设计原则的在不同场景下的实现方案. 抽象:抽离变化的部分,引入抽象层,实现具体实现