美文网首页
享元模式

享元模式

作者: 冉桓彬 | 来源:发表于2017-05-18 13:51 被阅读58次

1、享元模式介绍:

享元模式是对象池的一种实现, 它的英文名叫Flyweight, 代表轻量级的意思 享元模式用来尽可能减少内存使用量, 它适合用于可能存在大量重复对象的场景, 来缓存可共享的对象, 达到对象共享, 避免创建过多对象的效果, 这样一来就可以提升性能, 避免内存移除等;
  享元对象中的部分状态是可以共享, 可以共享的状态成为内部状态, 内部状态不会随着环境变化; 不可共享的状态则称之为外部状态, 它们会随着环境的改变而改变. 在享元模式中会建立一个对象容器, 在经典的享元模式中该容器为一个Map, 它的键是享元对象的内部状态, 他的值就是享元对象本身. 客户端程序通过这个内部状态从享元工厂中获取享元对象, 如果有缓存则使用缓存对象, 否则创建一个享元对象并且存入容器中, 这样一来就避免了创建过多对象的问题;

2、享元模式定义:

使用共享对象可有效地支持大量的细粒度的对象;

3、享元模式的使用场景:

1、系统中存在大量的的相似对象;
  2、细粒度的对象都具备较接近的外部状态, 而且内部状态与环境无关, 也就是说对象没有特定身份;
  3、需要缓冲池的场景;

4、优缺点:

大幅度降低内存中对象的数量, 但是它做到这一点所付出的代价是很高的;
  1、享元模式是的系统更加复杂, 为了使对象可以共享, 需要将一些状态外部化, 这使得程序的逻辑复杂化;
  2、享元模式将享元对象的状态外部化, 而读取外部状态使得运行时间稍微变长;

5、示例代码:

public interface Ticket {
    public void showTicketInfo(String bunk);
}
public class TrainTicket implements Ticket {
    
    public String mFrom;
    public String mTo;
    public String mBunk;
    public int mPrice;

    public TrainTicket(String from, String to) {
        mFrom = from;
        mTo = to;
    }

    @Override
    public void showTicketInfo(String from, String to) {
        mPrice = new Random().nextInt(300);
        System.out.println("购买从" + mFrom + "到" + mTo + "的" + mBunk + "火车票" + ",价格:" + mPrice);
    }
}

public class TicketFactory {

    private static Map<String, Ticket> ticketMap = new ConcurrentHashMap<String, Ticket>();

    public static Ticket getTicket(String from, String to) {
        String key = from + "-" + to;
        if (ticketMap.get(key) != null) {
            System.out.println("使用缓存 ==> " + key);
            return ticketMap.get(key);
        } else {
            System.out.println("创建对象 ==> " + key);
            Ticket ticket = new Ticket(from, to);
            ticketMap.put(key, ticket);
            return ticket;
        }
    }
}

相关文章

  • 设计模式之享元模式(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/ytdsxxtx.html