享元设计模式

享元模式基础

享元模式 - Flyweight,是构造型模式之一,通过与其他类似对象共享数据来减少内存的占有情况。享元模式运用共享技术有效地支持大量细粒度的对象。也就是说,在一个系统中如果有多个相同的对象,那么只需要共享一份即可,而不必去实例化每一个对象。
享元模式采用一个共享来避免大量拥有相同内容对象的开销。这种开销一般就是内存开销。享元对象能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态是存储在享元对象内部的,并且是不会随环境的变化而变化的,因此,一个享元可以具有内蕴状态并可以共享;外蕴状态是随环境的改变而改变的,不可共享的,享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候在传入享元对象内部。外蕴状态不可以影响享元对象的内蕴状态,它们是相互独立的。

享元模式结构图

享元模式
享元模式设计的角色

  • 抽象享元角色
  • 具体享元角色
  • 复合享元角色
  • 享元工厂角色
  • 客户端角色

单纯享元模式

概念

单纯享元模式,所有的享元对象都是可以共享的。
单纯享元模式涉及的角色

  • 抽象享元角色
  • 具体享元角色
  • 享元工厂角色
  • 客户端角色

实例

咖啡问题

  1. 抽象享元角色
public abstract class Caffee {

    /**
     * 卖咖啡
     */
    public abstract void sell();

}
  1. 具体享元角色
public class CaffeeProduct extends Caffee {

    private String product;

    public CaffeeProduct(String product){
        this.product = product;
    }

    public void sell(){
        System.out.println("HASHCODE: " + this.hashCode() + " -- SELL CAFFE: 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值