享元模式
享元(Flyweight)的核心思想很简单:如果一个对象实例一经创建就不可变,那么反复创建相同的实例就没有必要,直接向调用方返回一个共享的实例就行,这样即节省内存,又可以减少创建对象的过程,提高运行速度。
package com.designpattern;
import java.util.HashMap;
import java.util.Map;
/**
* 享元模式
*/
public class FlyweightPatternDemo {
public static void main(String[] args) {
Flyweight Flyweight = FlyweightFactory.get("对象1");
Flyweight.execute();
Flyweight Flyweight2 = FlyweightFactory.get("对象1");
Flyweight2.execute();
// 享受,元数据
// 同一个数据,认为就是一个元数据,整个系统里这个数据就一份,缓存起来
}
public static interface Flyweight {
public void execute();
}
public static class ConcreteFlyweight implements Flyweight {
private String name;
public ConcreteFlyweight(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void execute() {
System.out.println(name + "执行功能逻辑");
}
;
}
public static class FlyweightFactory {
private static Map<String, Flyweight> map = new HashMap();
public static Flyweight get(String name) {
Flyweight flyweight = (Flyweight) map.get(name);
if (flyweight == null) {
flyweight = new ConcreteFlyweight(name);
map.put(name, flyweight);
}
return flyweight;
}
}
}
享元模式在Java标准库中有很多应用。我们知道,包装类型如Byte、Integer都是不变类,因此,反复创建同一个值相同的包装类型是没有必要的。以Integer为例,如果我们通过Integer.valueOf()这个静态工厂方法创建Integer实例,当传入的int范围在-128~+127之间时,会直接返回缓存的Integer实例:
1020

被折叠的 条评论
为什么被折叠?



