设计模式2#多例

来源:互联网 发布:欧美网络教育本科文凭 编辑:程序博客网 时间:2024/06/10 16:02

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

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

缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放单例对象的类。
说明:该缓存中可以存放多个该类对象,每个对象以一个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;}@Overridepublic String toString() {return "Book [no=" + no + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + no;return result;}@Overridepublic 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);}}




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4个月宝宝鼻塞怎么办 4岁宝宝感冒鼻塞怎么办 宝宝4个月流鼻涕怎么办 3个月的宝宝鼻塞怎么办 50天的小孩鼻塞怎么办 鼻子流脓鼻涕2周怎么办 两岁宝宝流清鼻涕怎么办 1岁宝宝流黄鼻涕怎么办 宝宝上火流黄鼻涕怎么办 一周岁宝宝流清鼻涕怎么办 一周岁流清鼻涕怎么办 4岁宝宝感冒发烧怎么办 6个月宝宝流鼻涕怎么办 8岁儿童感冒发烧怎么办 婴儿感冒咳嗽怎么办%3f 小孩流鼻涕鼻塞怎么办最简单方法 宝宝鼻炎鼻子不通气怎么办 小孩晚上睡觉鼻子不通气怎么办 孩子晚上睡觉鼻子不通气怎么办 3个月婴儿流鼻涕怎么办 一个月宝宝鼻塞流鼻涕怎么办 我的鼻子不通气怎么办 鼻子擦多了疼怎么办 鼻涕擦多了好疼怎么办 鼻炎一直流鼻水怎么办 擤鼻涕后耳朵堵怎么办 鼻涕醒多了头疼怎么办 感冒鼻子破皮了怎么办 感冒鼻子擦红了怎么办 擤鼻涕时耳朵疼怎么办 鼻涕进耳朵里了怎么办 怀孕6个月生病了怎么办 浓鼻涕擤不出来怎么办 有鼻涕在鼻腔里怎么办 感冒鼻子擤的疼怎么办 擤鼻涕耳膜破了怎么办 钢铁雄心4闪退怎么办 钢铁雄心4太卡怎么办 无主之地2卡怎么办 卡盟给骗了怎么办 玩偶吸盘不吸了怎么办