网站首页 语言 会计 电脑 医学 资格证 职场 文艺体育 范文
当前位置:书香门第 > 计算机 > java语言

java设计模式:多例模式

栏目: java语言 / 发布于: / 人气:6.55K

导语:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。下面我们来看看多例模式,希望对大家有所帮助。

java设计模式:多例模式

  多例设计模式:单例+缓存

★ 缓存在单例中的使用

缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通常被设计成整个应用程序所共享的一个空间,

现要求实现一个用缓存存放单例对象的类。

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

  类对象

1234567891011121314package i; public class A { private int value; public int getValue() { return value; } public void setValue(int value) { thise = value; } }

  实现方式1:key值由用户指定

12345678910111213141516171819202122232425262728package i; import Map; import ; //该版本的key由用户来指定(如servlet缓存中的url,由用户在请求时发送过来)。池中的对象个数没控制 public class MyBuffer { //1创建一个存放多个对象的'容器----单例 private static Map<string, a=""> map = new HashMap<string, a="">(); //2给外面提供一个从容器获取对象的方法 public static A getInstance(String key){ //3先到容器中拿 A a = (key); //4如果没拿到,则创建一个新的放入容器中,并返回该新创建的对象。 // 如果拿到,则直接返回 if(a==null){ a = new A(); (key, a); } return a; } } </string,></string,>

  实现方式2:key值由代码内部自己决定

1234567891011121314151617181920212223242526272829package i; import Map; import ; //该版本的key由当前缓存类来维护。能够控制缓存中对象的个数 public class MyBuffer2 { //定义一个单例的池 private static Map<integer, a=""> map = new HashMap<integer, a="">(); private static int num=1; private static final int MAX=5; public static A getInstance(){ A a = (num); if(a==null){ a = new A(); (num, a); } num++; if(num>MAX){ //采用某些算法来处理。我们这里简单处理:强行把最早放出去的那个给新用户 num=1; } return a; } } </integer,></integer,>