定义
享元模式:主要用于减少创建对象的数量,以减少内存占用和提高性能。
享元模式的目的在于运用共享技术,使得一些细粒度的对象可以共享,我们的设计确实 也应该这样,多使用细粒度的对象,便于重用或重构。
案例
/**
* 报考人员信息类
*/
public class SignInfo {
private String id;
private String location;
private String subject;
private String postAddress;
public SignInfo(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getPostAddress() {
return postAddress;
}
public void setPostAddress(String postAddress) {
this.postAddress = postAddress;
}
}
/**
* 带有对象池的工厂类
*/
public class SignInfoFactory {
private static Map<String, SignInfo> pool = new HashMap<>();
public static SignInfo getSignInfo(String key) {
SignInfo result = null;
if (!pool.containsKey(key)) {
System.out.println(key + "----建立对象,并放置到池中");
result = new SignInfo(key);
pool.put(key, result);
} else {
result = pool.get(key);
System.out.println(key +"---直接从池中取得");
}
return result;
}
}
public class FlyweightPatternDemo {
public static void main(String[] args) {
//初始化对象池
for(int i=0;i<4;i++){
String subject = "科目" + i;
//初始化地址
for(int j=0;j<30;j++){
String key = subject + "考试地点"+j;
SignInfoFactory.getSignInfo(key);
}
}
SignInfo signInfo = SignInfoFactory.getSignInfo("科目1考试地点1");
}
}