java设计模式:多例模式
导语:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。下面我们来看看多例模式,希望对大家有所帮助。
多例设计模式:单例+缓存
★ 缓存在单例中的使用
缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通常被设计成整个应用程序所共享的一个空间,
现要求实现一个用缓存存放单例对象的类。
说明:该缓存中可以存放多个该类对象,每个对象以一个key值标识,key值相同时所访问的是同一个单例对象。
类对象
1234567891011121314package
cn.hncu.pattern.multi;
public
class
A
private
int
value;
public
int
getValue
return
value;
public
void
setValue
int
value
this
.value = value;
实现方式1:key值由用户指定
12345678910111213141516171819202122232425262728package
cn.hncu.pattern.multi;
import
java.util.HashMap;
import
java.util.Map;
//该版本的key由用户来指定如servlet缓存中的url,由用户在请求时发送过来。池中的对象个数没控制
public
class
MyBuffer
//1创建一个存放多个对象的'容器----单例
private
static
Map<string, a=
""
> map =
new
HashMap<string, a=
""
>;
//2给外面提供一个从容器获取对象的方法
public
static
A getInstanceString key
//3先到容器中拿
A a = map.getkey;
//4如果没拿到,则创建一个新的放入容器中,并返回该新创建的对象。
// 如果拿到,则直接返回
if
a==
null
a =
new
A;
map.putkey, a;
return
a;
</string,></string,>
实现方式2:key值由代码内部自己决定
1234567891011121314151617181920212223242526272829package
cn.hncu.pattern.multi;
import
java.util.HashMap;
import
java.util.Map;
//该版本的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 = map.getnum;
if
a==
null
a =
new
A;
map.putnum, a;
num++;
if
num>MAX
//采用某些算法来处理。我们这里简单处理:强行把最早放出去的那个给新用户
num=
1
;
return
a;
</integer,></integer,>