美文网首页
二十一、享元模式

二十一、享元模式

作者: LeeLeCoder | 来源:发表于2017-07-09 16:23 被阅读0次

1. 何为享元模式

定义:通过共享已存在的对象,减少创建对象内存开销的设计模式被称为享元模式。

享元模式和单例模式像一对孪生兄弟,二者的表现方式非常相似,但二者的存在目的却不是一样的。

单例模式保证了整个应用生命周期内,同一个对象只会存在一份内存,并且任何时间都能被访问使用。

享元模式的目的是如果存在可以复用的对象,那么对象将被共享而不是创建新的对象。在iOS开发中,享元模式的最佳实践就是UITableView的复用机制——超出屏幕外的单元格统一被回收放到一个复用队列之中,等待着需要新的单元格时进行复用。

2. 情景设置

我们要开发一个小应用程序,在屏幕上随机显示花朵图案,我们要显示图2-1所示的6种花朵。画了很多朵这些花之后,屏幕就填满了花。我们的目标是用六个不同的实例,画很多的随机尺寸和位置的花。如果为屏幕上所画的每朵花创建一个实例,程序会占用很多内存。

图2-1
解决方案

使用享元模式来限制花朵实例的数量,让它不多于可选花朵类型的总数。对于图2-2中的类图这样的设计,需要一种享元工厂和一些享元产品。FlowerView是UIImageView的字类,用它可以绘制一幅花朵图案。这个程序所用的享元工厂称为FlowerFactory,它管理一个FlowerView实例池。尽管池中对象的类是FlowerView,但客户端址要求FlowerFactory返回UIView的实例。与让工厂返回UIImage型的最终产品相比,这样的设计更加灵活。因为要是由于某种原因,我们也需要能够自行绘制的花朵,而不只是显示固定的图像,那么几乎全部都要修改---那就麻烦了。UIView被看做任何需要在屏幕上绘图的事物的高层抽象。FlowerFactory可以返回任何UIView类的对象,而不会破坏系统。这就是针对接口编程,而不是针对实现编程的一个好处。

图2-2 享元模式的类图

  他们的静态关系如图2-3所示:

图2-3 作为享元的FlowerViw的类图
  FlowerFactory用flowerPool聚合了一个花朵池的引用,flowerPool是一个保存FlowerView所有实例的数据结构。FlowerFactory用flowerViewWithType:方法,以UIView的形式返回FlowerView的实例。如果池中没有所请求花朵的类型,就会创建一个新的FlowerView实例。

3. 代码实现

待续。。。

相关文章

  • 设计模式之享元模式(flyweight模式)

    引入享元模式 享元模式的实例 享元模式的分析 引入享元模式 flyweight是轻量级的意思,指的是拳击比赛中选手...

  • 第4章 结构型模式-享元模式

    一、享元模式的简介 二、享元模式的优缺点 三、享元模式的实例

  • 享元模式

    一、享元模式介绍 二、享元模式代码实例

  • 设计模式--享元模式

    目录 本文的结构如下: 引言 什么是享元模式 模式的结构 典型代码 代码示例 单纯享元模式和复合享元模式 模式扩展...

  • 享元模式C++

    享元模式,就是运用共享技术有效地支持大量细粒度的对象。 享元模式结构图 享元模式基本代码 应用场景 享元模式可以避...

  • 二十一、享元模式

    1. 何为享元模式 定义:通过共享已存在的对象,减少创建对象内存开销的设计模式被称为享元模式。 享元模式和单例模式...

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

    1 享元模式的定义 享元模式:使用共享对象可有效地支持大量细粒度的对象。享元模式是池技术的重要实现方式。享元模式的...

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

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

  • 结构型模式:享元模式

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

  • Java设计模式(三)

    talk is cheap show me the code 享元模式 享元模式 责任链模式 责任链模式Filte...

网友评论

      本文标题:二十一、享元模式

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