设计模式2#多例

单例变形--缓存在单例的使用和多例(单例+缓存+控制实例个数)

“单例+缓存“技术   “单例+缓存+控制实例个数”

缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放单例对象的类。
说明:该缓存中可以存放多个该类对象,每个对象以一个key值标识,key值相同时所访问的是同一个单例对象。


实现代码中t1()函数表示简单的单例+缓存t2()函数表示带对象的单例+缓存 ,t3()函数表示单例+缓存+控制实例个数

Buffer类:

package cn.hncu.pattern.mulitition.one;

import java.util.HashMap;
import java.util.Map;

public class Buffer {
	private static final Map<String, Book> map=new HashMap<String, Book>();
	
	public static Book getInstance(String key){
		Book book=map.get(key);
		if(book==null){
			book=new Book();
			map.put(key, book);
		}
		return book;
	}
}

Book类:

package cn.hncu.pattern.mulitition.one;

public class Book {
	private String name;
	private int no;
	private double price;
	private String details;
	private static int count=1;
	public  Book(){
		no=count++;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getDetails() {
		return details;
	}
	public void setDetails(String details) {
		this.details = details;
	}
	@Override
	public String toString() {
		return "Book [no=" + no + "]";
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + no;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Book other = (Book) obj;
		if (no != other.no)
			return false;
		return true;
	}
	
}

简单的A类:

package cn.hncu.pattern.mulitition.one;

import java.util.HashMap;
import java.util.Map;

public class A {
	private static final Map<String, A> map=new HashMap<String, A>();
	public static A getInstance(String key){
		A a=map.get(key);
		if(a==null){
			a=new A();
			map.put(key, a);
		}
		return a;
	}
}

Test类(main):

package cn.hncu.pattern.mulitition.one;

/**
 * @author 军街
 *
 */
public class Test {
	public static void main(String[] args) {
//		t1();
//		t2();
		t3();
	}

	private static void t3() {
		System.out.println(cn.hncu.pattern.mulitition.two.A.getInstance());
		System.out.println(cn.hncu.pattern.mulitition.two.A.getInstance());
		System.out.println(cn.hncu.pattern.mulitition.two.A.getInstance());
		System.out.println(cn.hncu.pattern.mulitition.two.A.getInstance());
		System.out.println(cn.hncu.pattern.mulitition.two.A.getInstance());
	}

	private static void t2() {
		Buffer buf=new Buffer();
		System.out.println(buf.getInstance("111"));
		System.out.println(buf.getInstance("222"));
		System.out.println(buf.getInstance("111"));
		System.out.println(buf.getInstance("222"));
	}

	private static void t1() {
		A a1=A.getInstance("cn1");
		System.out.println(a1);
		
		A a2=A.getInstance("cn2");
		System.out.println(a2);
		
		A a3=A.getInstance("cn1");
		System.out.println(a3);
		
		A a4=A.getInstance("cn2");
		System.out.println(a4);
		
		
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值