享元模式(Flyweight),运用共享技术有效地支持大量细刻度的对象。享元模式是池技术的重要实现,可以减少应用程序创建的对象,降低程序内存的占用,提高程序的性能。
享元模式中的角色:
- Flyweight:抽象享元角色,同时定义出对象的外部状态和内部状态的接口或者实现。
- ConcreteFlyweight:具体享元角色,实现抽象享元角色定义的业务。
- FlyweightFactory:享元工厂,负责管理对象池和创建享元对象。
享元模式简单实现
(1)抽象享元角色
public abstract class WebSite {
public abstract void user();
}
(2)具体享元角色
public class ConcreteWebSite extends WebSite {
private String name = "";
public ConcreteWebSite(String name) {
this.name = name;
}
@Override
public void user() {
System.out.println("网站分类" + name);
}
}
(3)享元工厂
public class WebSiteFactory {
private static Map<String, ConcreteWebSite> pool = new HashMap<>();
public static ConcreteWebSite getWebSiteCategory(String key) {
if (pool.containsKey(key)) {
return pool.get(key);
} else {
ConcreteWebSite concreteWebSite = new ConcreteWebSite(key);
pool.put(key, concreteWebSite);
return concreteWebSite;
}
}
}
(4)客户端调用
public class Client {
public static void main(String[] args) {
ConcreteWebSite concreteWebSite = WebSiteFactory.getWebSiteCategory("博客");
concreteWebSite.user();
ConcreteWebSite concreteWebSite1 = WebSiteFactory.getWebSiteCategory("产品展示");
concreteWebSite1.user();
}
}
(5)输出
网站分类博客
网站分类产品展示
享元模式的使用场景
- 系统中存在大量的相似对象
- 需要缓冲池的场景
网友评论