结构模式---享元模式

享元模式是为了解决创建大量重复对象问题,注意此处一定是重复对象,重复对象:即除了堆栈的地址不一样外其他的数据和结构完全一样的对象
类图:
这里写图片描述
享元类:

public interface FlyWeight {
    public void print();
}
//对于这个具体享元对象而言只要id一样则它对外展现就是一样的,因为name是通过id生成了,而整个对象只有一个print方法
public class ConcreteFlyWeight implements FlyWeight {
    private static int createCount = 0;// 记录创建次数
    private int id;
    private String name;

    public ConcreteFlyWeight(int id) {
        super();
        this.id = id;
        this.name = "name" + id;
        createCount++;// 记录创建次数
    }

    @Override
    public void print() {
        System.out.println("ConcreteFlyWeight [id=" + id + ", name=" + name + "]");
    }

    public static int getCreateCount() {
        return createCount;
    }
}

享元工厂:

public class ConcreteFlyWeight implements FlyWeight {
    private static int createCount = 0;// 记录创建次数
    private int id;
    private String name;

    public ConcreteFlyWeight(int id) {
        super();
        this.id = id;
        this.name = "name" + id;
        createCount++;// 记录创建次数
    }

    @Override
    public void print() {
        System.out.println("ConcreteFlyWeight [id=" + id + ", name=" + name + "]");
    }

    public static int getCreateCount() {
        return createCount;
    }
}

客户端类:

public class Client {
    public static void main(String[] args) {
        FlyWeight flyWeight1 = FlyWeightFactory.getFlyWeight(1);
        flyWeight1.print();
        System.out.println(flyWeight1);

        FlyWeight flyWeight2 = FlyWeightFactory.getFlyWeight(1);
        flyWeight2.print();
        System.out.println(flyWeight2);

        System.out.println("创建次数" + ConcreteFlyWeight.getCreateCount());
    }
}

结果:

ConcreteFlyWeight [id=1, name=name1]
ConcreteFlyWeight@41975e01
ConcreteFlyWeight [id=1, name=name1]
ConcreteFlyWeight@41975e01
创建次数1

使用享元模式的时候一定要主要对于客户端而言是不是真的重复对象,重点在重复对象这四个字上,如果对客户端而言这不是重复对象,则一定不能使用享元模式,个人觉得,重复对象是针对使用者,也就是客户端而言,只要客户端使用两个对象没有什么不一样就可以认定是重复对象,就可以使用享元模式(使用享元模式切忌臆断,自己看起来不重复的对象其实对于客户端而言就是重复的,或者自己看起来重复的对于客户端而言就不是重复的)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值