★ 缓存在单例中的使用    缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通

常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放单例对象的类。

说明:该缓存中可以存放多个该类对象,每个对象以一个key值标识,key值相同时所访问的是同一个单例对象。

代码如下:

  1.  
    //缓存
  2.  
    import java.util.HashMap;
  3.  
    import java.util.Map;
  4.  
    //本例中,因为没有定义最大容量,所以"理论上"是可以无限制添加的,直至系统崩溃
  5.  
    public class Student {
  6.  
    //定义用于缓存的容器
  7.  
    private static Map map = new HashMap();
  8.  
    /*本例中,Student类的构造方法不需要私有化,
  9.  
    * 因为采用单例模式的是map
  10.  
    * 而student是加到map中的
  11.  
    */
  12.  
    public static Student getInstance(String key){
  13.  
    //到缓存中查找key对应的对象
  14.  
    Student stu = map.get(key);
  15.  
    if(stu==null){//若为空,则new一个并加到map中
  16.  
    stu = new Student();
  17.  
    map.put(key, stu);
  18.  
    }
  19.  
    return stu;
  20.  
    }
  21.  
    }

★ 单例变形——多例模式   把上面缓存的单例实现,做成一个能够控制对象个数的共享空间,供整个应用程序使用。在

缓存中维护指定个数的对象,每个对象的key值由该类内部指定,有外部请求时直接返回其中一个对象出去。

说明:相当于维护一个指定数量的对象池,当请求个数超过控制的总数时,开始循环重复使用 。

代码如下:

  1.  
    //单例的变种--多例
  2.  
    import java.util.HashMap;
  3.  
    import java.util.Map;
  4.  
    //本例中,count的值决定了缓存区的最大容量
  5.  
    public class Student_2 {
  6.  
    private static Map map = new HashMap();//将缓存当作单例
  7.  
    private static int count=4;//缓存区的实例总数(该整数可以采用用户设置或读取配置文件的方式更改)
  8.  
    private static int num=1;//当前实例(对象)的序号--用num来当作内部维护的key
  9.  
     
  10.  
    public static Student_2 getInstance(){
  11.  
    Student_2 stu = map.get(num);
  12.  
    if(stu==null){
  13.  
    //若stu为空,则new一个出来并加到map中
  14.  
    stu = new Student_2();
  15.  
    map.put(num, stu);
  16.  
    }
  17.  
    num++;//序号不断变化,循环利用缓存区
  18.  
    if(num>count){
  19.  
    num=1;//重置当前实例的序号
  20.  
    }
  21.  
    return stu;
  22.  
    }
  23.  
    }

java设计模式——多例模式的更多相关文章

  1. java设计模式3--单例模式(Singleton)

    本文地址:http://www.cnblogs.com/archimedes/p/java-singleton-pattern.html,转载请注明源地址. 单例模式 保证一个类仅有一个实例,并提供一 ...

  2. java设计模式1--单例模式

    1:单例模式简介 单例模式是一种常用的软件设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供唯一的实例.总而言之就是在系统中只会存在一个对象,其中的数据是共享的 特点: 单例类只能有一 ...

  3. [java]设计模式1-单例模式

    单例模式:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管 ...

  4. java设计模式6--适配器模式(Adapter )

    本文地址:http://www.cnblogs.com/archimedes/p/java-adapter-pattern.html,转载请注明源地址. 适配器模式(别名:包装器) 将一个类的接口转换 ...

  5. java设计模式5--原型模式(Prototype)

    本文地址:http://www.cnblogs.com/archimedes/p/java-prototype-pattern.html,转载请注明源地址. 原型模式 用原型实例指定创建对象的种类,并 ...

  6. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  7. Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景

    我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...

  8. Java 设计模式之建造者模式(四)

    原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...

  9. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

随机推荐

  1. git配置gitignore

    一.背景                                                                                                 ...

  2. C#实现WinForm下DataGridView控件的拷贝和粘贴

    DataGridView控件应该是数据库应用系统最常用的控件之一,其方便性不言而喻的.往往用户在使用过程中会提出"从DataGridView空间 中拷贝数据或是向某个DataGridView ...

  3. 正则表达式写法:Java和Js比较

    1.表示数字 Java:\\d              Js: \d 比如密码写法,Java中:(^[a-zA-Z\\d]{6,20}$),Js中:/^[a-zA-Z\d]{6,20}$/

  4. [转]VTH changes in DC from Hspice

    Hello, everyone. I’d like to know the threshold of the MOS transistor. And I found the “.print vth() ...

  5. java的多线程(一)

    我们知道我们打开个程序(或者说运行一款软件)其实也就是创建了一个进程,只不过程序是静态指令的集合,而进程是正在系统中运行的指令集合,进程是系统进行资源分配与调度的一个独立单位.进程具有独立性,动态性, ...

  6. zookeeper的部署

    http://blog.csdn.net/hongtu1993/article/details/53215587http://www.centoscn.com/image-text/install/2 ...

  7. 网络编程之TCP/UDP及其流程比较(转)

    TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式TCP保证数据正确性,UDP可能丢包TCP保证数据顺序,UDP不保证 具体编程 ...

  8. C#用ado.net访问EXCEL的常见问题及解决方法

    C#用ado.net访问EXCEL的常见问题及解决方法,除了像sql server,access常见的数据库,其实Excel文件也可以做为数据库访问. ado.net访问excel的实例: OleDb ...

  9. js获取日期实例之昨天今天和明天、后天

    本文介绍了js获取日期的方法,可以获取前天.昨天.今天.明天.后天. 代码: <html> <head> <meta http-equiv="Content-T ...

  10. git 从远程git服务上拉代码 git服务器非默认端口

    从服务器上拉代码有如下报错: fatal: Not a git repository (or any of the parent directories): .git 初始代本地版本库: [root@ ...