设计模式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
- 设计模式2#多例
- 设计模式(2): 什么是设计模式
- 设计模式2—Proxy设计模式
- 设计模式:2)策略设计模式
- 设计模式2-Builder模式
- 设计模式2-工厂模式
- 设计模式(2) ------------组合模式
- 设计模式2 观察者模式
- 设计模式(2)--观察者模式
- 设计模式(2): 生成器模式
- 设计模式2-模板模式
- 设计模式:2策略模式
- 设计模式(2)-代理模式
- 设计模式-2-观察者模式
- 【设计模式】## 2、模板模式##
- 设计模式(2) Builder模式
- 设计模式【2】:策略模式
- 设计模式--[2]原型模式
- 递归---Flatten Binary Tree to Linked List
- MYBATIS+SPRING 配置
- 杭电5562
- 一道腾讯笔试题--Integer的比较
- String、StringBuffer和StringBuilder
- 设计模式2#多例
- UVA 147 Dollars(完全背包)
- JAVA注解
- 杭电5567
- [Android] Handler 详解
- Android的桌面小图标Widget的学习
- jdk 1.7中HashMap的HashIterator实现细节小记
- ListView使用:添加数据、图片与修改数据
- [POJ1961]Period(KMP)