设计模式之享元模式

先看下定义: 允许使用对象共享来有效地支持大量细粒度对象

提取关键词,共享对象,也就是说这个对象是共享的,那么也就是说是被继承或者实现的。

而一般继承或者实现都是应该有很多共性,所以被抽取出共性。

所以当程序中存在很多共性的地方,只是根据外部调用会有些变化时,那么可以考虑享元模式。

这种模式可以参考连接池,多个连接放在连接池中,如果有需要就从池里面拿,用完了就放回到池里面。

而连接池一般都是先创建好,然后从池里面取,说到先初始化数据,那么就要考虑到工厂模式。
在这里插入图片描述

按照连接池方式,那么就创建两个Dao。

用工厂方式初始化,里面的Map是享元模式的精髓,共享的地方。

/**
 * @author lw
 * @date 2022/3/30 0030
 * @description
 */
public class SmsDaoFactory {

    private static Map<String,SmsDao> daoMap = new HashMap<>();

    public static SmsDao produce(String type){
        if(daoMap.size()==0){
            initDao();
        }
        return daoMap.get(type);
    }

    /**
     * 初始化
     */
    private static void initDao(){
        SmsDao yidong = new YiDongSmsDao();
        yidong.connect();
        daoMap.put("yidong",yidong);

        SmsDao liantong = new LianTongSmsDao();
        liantong.connect();
        daoMap.put("liantong",liantong);
    }
}

调用者

/**
 * @author lw
 * @date 2022/3/29 0029
 * @description 短信服务
 */
public class SmsService {
    public void send() {
       SmsDao smsDao = SmsDaoFactory.produce("yidong");
       smsDao.insertSms();
    }
}


SmsService smsService = new SmsService();
smsService.send();
smsService.send();
smsService.send();
smsService.send();


//运行后输出
YiDongSmsDao.connect
LianTongSmsDao.connect
    
YiDongSmsDao.insertSms
YiDongSmsDao.insertSms
YiDongSmsDao.insertSms
YiDongSmsDao.insertSms

总结

凡是对象在多个地方共享,那么就可能是享元模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值