享元模式

作者: YoungerDev | 来源:发表于2018-04-07 11:26 被阅读29次

Android进阶之设计模式

享元模式

定义: 使用共享对象有效地支持大量细粒度的对象.

享元模式是池技术的重要实现方式,它可以减少应用程序创建的对象,降低程序内存的占用,提高程序的性能.

使用场景:

  1. 系统中存在大量的相似对象.
  2. 需要缓冲池的场景.

举个例子吧:

//抽象享元角色是一个商品接口,它定义了showGoodsPrice方法来展示商品价格
public interface IGoods {
    public void showGoodsPrice(String name);
}



//定义类Goods 它是吸纳IGoods 接口,并是实现了 showGoodsPrice方法
public class Goods implements IGoods{
    private String name;//名称
    private String version;// 版本

    public Goods(String name) {
        this.name = name;
    }

    @Override
    public void showGoodsPrice(String version) {
        if (version.equals("32G")){
            System.out.println("价格为5199元");
        }else if (version.equals("128G")){
            System.out.println("价格为5999元");
        }
    }
}



//享元工厂
public class GoodsFactory {
    private static Map<String ,Goods> pool = new HashMap<String ,Goods>();
    public static Goods getGoods(String name){
        if (pool.containsKey(name)){
            System.out.println("使用缓存,key为:"+name);
            return pool.get(name);
        }else {
            Goods goods = new Goods(name);
            pool.put(name,goods);
            System.out.println("创建商品,key 为:"+name);
            return goods;
        }
    }
}

Client 使用



    public static void main(String[] args) {
    
        Goods goods1 = GoodsFactory.getGoods("iphone7");
        goods1.showGoodsPrice("32G");

        Goods goods2 = GoodsFactory.getGoods("iphone7");
        goods2.showGoodsPrice("32G");

        Goods goods3 = GoodsFactory.getGoods("iphone7");
        goods3.showGoodsPrice("128G");
    
}

打印出的结果是:


创建商品,key 为:iphone7
价格为5199元
使用缓存,key为:iphone7
价格为5199元
使用缓存,key为:iphone7
价格为5999元

从输出结果可以看出,只有第一次是创建 Goods 对象,后面因为 key 值相同,所以均使用了对象池中的 Goods 对象.

相关文章

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

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

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

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

  • 享元模式

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

  • 设计模式--享元模式

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

  • 享元模式C++

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

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

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

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

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

  • 结构型模式:享元模式

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

  • Java设计模式(三)

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

  • 结构型-Flyweight

    享元模式原理与实现 享元模式(Flyweight Design Pattern) 所谓“享元”,顾名思义就是被共享...

网友评论

    本文标题:享元模式

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