设计模式之享元模式(结构型)

网友投稿 282 2022-09-23

设计模式之享元模式(结构型)

模式定义

享元模式(Flyweight Pattern)就是通过共享技术实现大量细粒度对象的复用。享元模式是通过细粒度对象的共享,所以也可以说享元模式是一种轻量级模式。按照Gof模式分类,享元模式属于对象结构型模式。

模式解释

可以共享的内容称为内部状态(Intrinsic State),需要外部环境设置的不能共享的内容称为外部状态(Extrinsic State)。享元模式需要创建一个享元工厂负责维护享元池(Flyweight Pool),享元池用于存储具有相同内部状态的享元对象。享元模式中共享的仅仅是享元对象,外部状态是需要通过环境类设置的,在实际使用中,能共享的内部状态不是很多的,所以设计享元对象是比较小的,也就是细粒度对象,所以说享元模式就是通过共享技术实现大量细粒度对象的复用创建大量对象会一定程度影响系统性能,不方便程序阅读,使用享元模式可以减少对象使用。

模式角色

享元模式包括下面角色

Flyweight:抽象享元类ConcreteFlyweight:具体享元类UnsharedConcreteFlyweight:非分享具体享元类FlyweightFactory:享元工厂类

享元模式的核心在享元工厂类,享元工厂类的作用在与维护享元池,需要什么对象,可以从享元池获取

典型例子

例子来自:​​《设计模式》​​一书

public class Flyweight{ //内部状态作为成员属性 private String intrinsicState; public Flyweight(String intrinsicState) { this.intrinsicState = intrinsicState; } public void operation(String extrinsicState) { ...... } }

public class FlyweightFactory{ private HashMap flyweights = new HashMap(); public Flyweight getFlyweight(String key) { if(flyweights.containsKey(key)) { //享元池有对象,直接获取 return (Flyweight)flyweights.get(key); } else { //创建具体的享元对象,存储在享元池 Flyweight fw = new ConcreteFlyweight(); flyweights.put(key,fw); return fw; } }}

模式应用

JDK类库中的String类使用了享元模式…

模式分类

享元模式分为单存享元模式和复合享元模式

单纯享元模式:在单纯享元模式中不存在非共享具体单元,所有的具体享元类对象都是可以共享的。复合享元模式:通过复合模式将单纯享元模式进行组合,形成复合享元对象

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:​​https://cloud.tencent.com/developer/support-plan?invite_code=2cpd3xm4n1q8s​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一文读懂苹果发布会:桌面级自研处理器M1发布 三款Mac更新!
下一篇:设计模式之解释器模式(行为型)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~