zoukankan      html  css  js  c++  java
  • 1 结构型模式之

    享元模式的介绍:享元模式主要的作用就是可以对象共享,避免创建多对象。享元模式是对象池的一种实现,它的英文名字叫 Flyweight ,代表轻量级的意思。享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享,避免创建过多的对象的效果,这样一来可以提升性能,尽量减少内存的使用等。

    享元模式的定义:使用共享对象池来缓存对象,如果有空闲的对象有拿来用,如果没有,新建一个放入池中,然后再返回使用。

    享元模式的使用场景:

    1 系统中存在大量的相似对象

    2 需要缓冲池的场景

    3 消息队列中也有用到

    下面以一个很简单的例子来介绍享元的用法。

    首先需要有一个抽象的对象。也就是享元对象,如下:

    1 /**
    2  * 享元抽象对象
    3  */
    4 public abstract class Flyweight {
    5     protected abstract void doSomething();
    6 }

    下面是具体的享元对象

    1 /**
    2  * 具体的享元对象
    3  */
    4 public class ConcreteFlyweight extends Flyweight{
    5     @Override
    6     protected void doSomething() {
    7         System.out.println("do something");
    8     }
    9 }
     享元模式的核心在于享元工厂类,
    享元工厂类的作用在于提供一个用于存储享元对象的享元池,
    用户需要对象时,首先从享元池中获取,
    如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象。

     1 /**
     2  *
     3  *  享元模式的核心在于享元工厂类,
     4  *  享元工厂类的作用在于提供一个用于存储享元对象的享元池,
     5  *  用户需要对象时,首先从享元池中获取,
     6  *  如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象。
     7  *
     8  */
     9 public class FlyweightFactory {
    10     private HashMap<String,Flyweight> flyweights = new HashMap<>();
    11 
    12     public Flyweight getFlyweight(String key){
    13         Flyweight flyweight = flyweights.get(key);
    14 
    15         //池中没有
    16         if(flyweight == null){
    17             //新建一个
    18             flyweight = new ConcreteFlyweight();
    19             //然后放入池中
    20             flyweights.put(key,flyweight);
    21         }
    22 
    23         //最后返回或者池中有,直接返回
    24         return flyweight;
    25     }
    26 }

    如上面的代码注释:如果有,直接返回,如果池中没有,新建一个享元对象,然后放入池中,再返回新建的对象。

    这就是享元模式的思想,很简单,却很有用,Android中的消息机制就是这样的,有兴趣的可以看看android的Looper,Hander机制的源代码。

  • 相关阅读:
    做小程序的流程总结(基本篇)
    ajax页面请求的做的留言板
    模仿文件存储方式,来进行添加、修改、添加子类的操作。
    轮播图(点击之后,会以滑动的形式滑动到指定的图片-有竖向和横向的显示)
    定时器使用实现的动画,宽度、位置等属性
    利用js、html以及Css简单制作了一个模拟手机短信发送
    利用反射获得数据库中存储数据的实现方法
    反射
    equals、static、单例模式的设计
    FPGA设计中的复位
  • 原文地址:https://www.cnblogs.com/start1225/p/6758671.html
Copyright © 2011-2022 走看看