设计模式-蝇量模式/享元模式

本文深入探讨了享元模式,一种用于减少对象创建数量的设计模式,通过共享机制来降低内存消耗和提升性能。适用于需要大量相似对象的场景,如展示大量随机生成的坐标及其年龄。文章提供了详细的代码示例,展示了如何利用享元模式来优化内存使用。

1.定义

以共享的方式高效的支持大量的细粒度对象,能够减少运行时对象实例的个数,节省内存。主要用于减少对象的创建,以节省内存提高性能。

2.使用场景及设计

2.1.使用场景

系统中需要大量类似的对象。例:需要展示100000个随机生成的坐标及其年龄。

2.2.设计

创建一个专门展示坐标及其年龄的对象,在使用一个manager类来创建所需要的对象。

3.测试代码

入口类

package com.glt.designpattern.flyWeight;

public class InitMain {
    public static void main(String[] args) {
        /**
         * 蝇量模式/享元模式
         *  以共享的方式高效的支持大量的细粒度对象,能够减少运行时对象实例的个数,节省内存
         */


        TreeManager manager = new TreeManager();

        manager.displayTrees();
    }
}

package com.glt.designpattern.flyWeight;

/**
 * 蝇量对象
 */
public class Tree {
    public void display(int x, int y, int age) {
        System.out.println("x=" + x);
        System.out.println("y=" + y);
        System.out.println("age=" + age);
    }
}
package com.glt.designpattern.flyWeight;

/**
 * 管理对象
 */
public class TreeManager {
    int len = 100000;
    int[][] treeArray = new int[len][3];
    private Tree tree;

    public TreeManager() {
        tree = new Tree();
        for (int i = 0; i < len; i++) {
            treeArray[i] = new int[]{(int) Math.round(Math.random() * len), (int) Math.round(Math.random() * len), (int) Math.round(Math.random() * len) % 5};
        }
    }

    public void displayTrees() {
        for (int i = 0; i < len; i++) {
            tree.display(treeArray[i][0], treeArray[i][1], treeArray[i][2]);
        }
    }
}

输出结果

x=58182
y=75606
age=2
x=91598
y=5026
age=2

4.总结

优点:
能够减少对象的创建,降低系统内存开销,提高系统的性能。
缺点:
蝇量对象内部和外部隔离性高,内部发生改变可能会影响到输出结果,出现意外情况。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值