栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式-亨元模式(蝇量模式-Flyweight)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式-亨元模式(蝇量模式-Flyweight)

亨元模式定义

当某个类的一个实例可以用于提供许多虚拟实例时,使用亨元模式。

假设一个使用场景

假设在一个景观设计应用中,需要添加一些树作为对象,树有一个XY位置,并根据年龄来绘制自己。

此时面临的困境:

有一个大客户,打算用这个软件进行景观设计,但是在使用一周之后(创建了很多树),此时发现软件变卡,对象过多,占用内存大。

解决方案

使用一棵树来表示上面所有的树,也就是只有一个实例来维护所有树的客户对象,这就是亨元模式。

由于树只有三个变量,X坐标、Y坐标与树的年龄,所以可以创建一个树的管理器,这个管理器有个数组,数组保存这些信息,然后调用同一个对象进行创建。

树场景的类图

树场景的代码设计
public class Tree {
    
    private int x;
    private int y;
    private int age;

    public Tree(int x, int y, int age) {
        this.x = x;
        this.y = y;
        this.age = age;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
    public void display(){
        System.out.println(x + " " + y + " " + age);
    }
    
}

public class TreeManager {

    private List treeArray;

    public TreeManager() {
        this.treeArray = new ArrayList<>();
    }

    public void addTree(Tree tree){
        if (!treeArray.contains(tree)){
            treeArray.add(tree);
        }
    }

    public void removeTree(Tree tree){
        if(treeArray.contains(tree)){
            treeArray.remove(tree);
        }

    }

    public void displayTrees(){
        for (Tree t:treeArray) {
            t.display();
        }
    }

}
亨元模式优点

减少运行时对象实例的数目,节省内存。

把许多虚拟对象的状态集中放在一个地方。

亨元模式的用途和缺点

当一个类有许多实例时,而这些实例能够用一致的方法控制时,用亨元。

缺点在于,一旦实现,这个类的单独实例,无法用于与其它实例不同的独立行为。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863574.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号