设计模式之享元模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之享元模式相关的知识,希望对你有一定的参考价值。

1、享元模式的简介:


    a、场景:

    -  内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或者相似的对象,我们可以通过享元模式,节省内存。


    b、核心:

    -  享元模式以共享的方式高效地支持大量细粒度对象的重用。

    -  享元对象做到共享的关键是区分了内部状态和外部状态。


    c、享元模式的实现:

    -  FlyweightFactory 享元池一般设计成键值对。

    -  Flyweight 抽象享元类:

      *  通常是一个接口或者抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,设置外部状态。

    -  ConcreteFlyWeight 具体享元类:

      *  为内部状态提供成员变量进行存储。

    -  UnsharedConcreteFlyWeight 非共享享元类:

      *  不能被共享的子类可以设计为非共享享元类

    

2、简单的代码演示:(可以想象自己要设计一个围棋软件,棋子的颜色、大小和形状都是不变的,但是它们的位置是变的,可以考虑使用享元模式。)


    a、下面三张示图中,ClessFlyWeightFactory 类是享元池,ClessFlyWeight 接口是抽象享元类,ConcreteChess 类是具体享元类。


技术分享


技术分享


技术分享

    

    b、Client12 查看测试类中的测试结果,以及示例中的类图关系。(可以看到, ChessFlyWeightFactory 类和 ChessFlyWeight 接口是单向的聚合关系。)


技术分享

技术分享


3、享元模式的总结:


    优点:

        -  极大减少内存中的对象的数量

        -  相同或者相似对象内存中只存了一份,极大的节约资源,提高系统性能

        -  外部状态相对独立,不影响内部状态

    缺点:

        -  模式较复杂,是程序逻辑复杂化

        -  为了节省内存,共享了内部状态,分离出外部状态,而读取外部状态是运行时间变长,用时间换取了空间。

本文出自 “12392717” 博客,请务必保留此出处http://12402717.blog.51cto.com/12392717/1929142

以上是关于设计模式之享元模式的主要内容,如果未能解决你的问题,请参考以下文章

Java设计模式之享元模式

设计模式之享元模式与组合模式详解和应用

设计模式之享元模式

设计模式之享元模式

设计模式之享元模式

设计模式之享元模式