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

二十一、享元模式

作者: 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. 代码实现

    待续。。。

    相关文章

      网友评论

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

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