设计模式--享元Flyweight--重复利用对象; Java里的String就是用的享元模式。Java里的String所有的字符串都放在一个常量池里

享元–共享元数据, 小对象直接放池子里。 用的时候直接拿,不用new.

坦克子弹代码:new 出来的 子弹在List里, 当子弹跑出整个页面时,把它的living标志置为false. 当需要新生成子弹时,把这个子弹位置改下,标志置为true即可。

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

class Bullet{
    public UUID id = UUID.randomUUID();
    boolean living = true;

    @Override
    public String toString() {
        return "Bullet{" +
                "id=" + id +
                '}';
    }
}

public class BulletPool {
    List<Bullet> bullets = new ArrayList<>();
    {
        for (int i = 0; i < 5; i++) {
            bullets.add(new Bullet());
        }
    }

    public Bullet getBullet(){
        for (int i = 0; i < bullets.size(); i++) {
            Bullet bullet = bullets.get(i);
            if(!bullet.living){
                bullet.living = true;
                return  bullet;
            }
        }

        return new Bullet();
    }

    public static void main(String[] args) {
        BulletPool bulletPool = new BulletPool();

        for (int i = 0; i < 10; i++) {
            Bullet bullet = bulletPool.getBullet();
            System.out.println(bullet);
        }
    }
}

**Java里的String就是用的享元模式。Java里的String所有的字符串都放在一个常量池里。 **

public class TestSpring {

    public static void main(String[] args) {
        String s1  = "abc";
        String s2  = "abc";
        String s3  = new String("abc");
        String s4  = new String("abc");

        System.out.println(s1 == s2);	    true
        System.out.println(s1 == s3);      false
        System.out.println(s3 == s4);      false  
        System.out.println(s3.intern() == s1);       true   s3.intern   new String("参数是常量")  也指向常量池。
        System.out.println(s3.intern() == s4.intern());  true  

    }
}

结合Composite的Flyweight. 就是组合的享元。 例如下图的AbABBA就是由前面的 A , B 组成的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值