享元模式

享元模式听名字就知道是共享一个东西,为了节省内存嘛。那么它和单例模式有什么不同呢?单例模式就一个对象,而享元模式是一组对象,共享的是相同的对象。没错,我们的String就用的享元模式,下面我们代码实现:

public class Flyweight {
    interface 字符串 {
        void operation();
    }

    public static class 包装字符串 implements 字符串 {//可以有斜体字符串,但重点不是这
        private String string;

        public 包装字符串(String str) {
            string = str;
        }

        public void operation() {
            System.out.println(this.hashCode());
        }
    }

    public static class FlyweightFactory {  //这里看出工厂模式的好处了吧

        private Hashtable<String, 字符串> flyweights = new Hashtable<>();

        public FlyweightFactory() {
        }

        public 字符串 getFlyWeight(String obj) {
            字符串 flyweight = flyweights.get(obj);
            if (flyweight == null) {//不同的String才产生新的对象
                flyweight = new 包装字符串(obj);
                flyweights.put(obj, flyweight);
            }
            return flyweight;
        }
    }

    public static void main(String[] args) {
        FlyweightFactory factory = new FlyweightFactory();
        字符串 fly1 = factory.getFlyWeight("Google");
        字符串 fly2 = factory.getFlyWeight("Qutr");
        字符串 fly3 = factory.getFlyWeight("Google");
        fly1.operation();
        fly2.operation();
        fly3.operation();
    }
}
输出:
2133927002
1836019240
2133927002

觉得容易理解的话面向对象的23种设计模式点这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值