设计模式-结构型模式亨元模式

14 篇文章 0 订阅
14 篇文章 0 订阅

享元模式的应用场景

  • 含义: 是对象池的一种实现,类似于线程池,可以避免不停的创建和销毁多个对象,消耗性能;
  • 使用场景: 在系统有大量的相似对象,需要缓冲池的场景,一般会搭配工厂模式使用;
  • 现实案例: 房源渠道、全国社保联网、线程池;

亨元的通用实现

在这里插入图片描述

  1. 接口Shape定义亨元被外部调用的方法
  2. 具体的亨元实现Circle实现接口Shape并实现自定义方法
  3. 工厂类ShapeFactory 在调用getCircle() 的时候从维护的HashMap(circleMap)中根据主键获取唯一身份标识的处理类,或者直接取出一个使用,使用完成之后归还处理对象;

与注册式单例的区分:

  • 单例模式: 重点在创建单例,key为class,因此一个对象只能创建一次,
  • 亨元模式: 重点在资源的重复利用,通常一个对象被多次创建,重复利用;

在源码中的使用:

  1. 案例1 ThreadPoolExecutor线程池
public class ThreadPoolExecutor extends AbstractExecutorService {
    // runState is stored in the high-order bits
    // 运行状态
    private static final int RUNNING    = -1 << COUNT_BITS;
    // 关机状态(调用shutdown()实现,线程池不再接收任务,正在执行的任务可以继续被消费;   tryTerminate()将状态修改为TERMINATED)
    private static final int SHUTDOWN   =  0 << COUNT_BITS;
    // 停止状态(interruptWorkers()中断所有线程包含当前正在活动的线程;   tryTerminate()将状态修改为TERMINATED)
    private static final int STOP       =  1 << COUNT_BITS;
    // 清理状态 线程池内部才能调用的状态(线程池数量为空,等待队列数量为null)
    private static final int TIDYING    =  2 << COUNT_BITS;
    // 终止状态
    private static final int TERMINATED =  3 << COUNT_BITS;
    
    //  线程池对象
    private final HashSet<Worker> workers = new HashSet<Worker>();
    /**
		其中外部状态: RUNNING、SHUTDOWN和STOP状态; 这些状态
		内部状态:TIDYING和TERMINATED
	**/
}

评估:

  • 优点:减少对象创建,减少内存中对象的数量,降低系统的内存,提高效率;
  • 缺点: 使得程序和逻辑变得复杂;内外部状态的分离,外部状态必须具体固有性质,不应该随着内部状态变化而变化;关注线程安全问题;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值