美文网首页程序员设计模式
设计模式之享元模式(结构型)

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

作者: smileNicky | 来源:发表于2019-01-05 15:22 被阅读1次

模式定义

享元模式(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类使用了享元模式
    ...

模式分类

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

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

相关文章

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • 设计模式-享元模式

    享元模式介绍 享元模式(Flyweight Pattern)是结构型设计模式的一种。其实对象池的一种实现方式,通过...

  • 手撸golang 结构型设计模式 享元模式

    手撸golang 结构型设计模式 享元模式 缘起 最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔...

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

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

    模式定义 享元模式(Flyweight Pattern)就是通过共享技术实现大量细粒度对象的复用。享元模式是通过细...

  • 设计模式(十二)享元模式

    享元模式定义 享元模式是结构型设计模式的一种,是池技术的重要实现方式,它可以减少应用程序创建的对象,降低程序内存的...

  • Android常用设计模式

    设计模式分类 创建型模式工厂方式模式建造者模式抽象工程模式原型模式单例模式 结构型模式桥接模式代理模式享元模式外观...

  • Java设计模式——享元模式

    Java设计模式之享元模式 这期跟大家聊的的设计模式是享元模式,该模式也是结构模式。 简介 利用共享的方式解决大量...

  • S15. 享元模式

    享元模式 享元模式是一种结构型设计模式, 它允许你在消耗少量内存的情况下支持大量对象。 简单的理解: 一个类的成员...

  • 12、结构型模式-享元设计模式

    享元设计模式(Flyweight Pattern) 属于结构型模式,主要用于减少创建对象的数量,以减少内存占用和提...

网友评论

    本文标题:设计模式之享元模式(结构型)

    本文链接:https://www.haomeiwen.com/subject/luorrqtx.html