设计模式之蝇量模式

来源:互联网 发布:reminder 软件 编辑:程序博客网 时间:2024/04/30 12:05

场景.首先来看一个简单的类:

package designpattern.flyweight;public class Tree {private int  xCoord;private int yCoord;private int age;public void display() {System.out.println("Position is (" + xCoord + " , " + yCoord + " , age is " + age + ".");}public int getxCoord() {return xCoord;}public void setxCoord(int xCoord) {this.xCoord = xCoord;}public int getyCoord() {return yCoord;}public void setyCoord(int yCoord) {this.yCoord = yCoord;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

当你要使用该类时,便会实例化一个该类的对象,如果需要实例化的数量过多,则会消耗很多内存?如何解决这个问题呢?

解决办法:使用蝇量模式

package designpattern.flyweight;public class FlyweightTree {public static void display(int xCoord, int yCoord, int age) {System.out.println("Position is (" + xCoord + " , " + yCoord + ") , age is " + age + ".");}}

package designpattern.flyweight;public class TreeManager {int[][] treeArray = {{1,2,10},{1,2,10},{1,2,10}};public void displayTree() {for (int i = 0; i < treeArray.length; i++) {FlyweightTree.display(treeArray[i][0], treeArray[i][1], treeArray[i][2]);}}public static void main(String[] args) {TreeManager t = new TreeManager();t.displayTree();}}

蝇量模式:只用一个树实例和一个客户对象来维护”所有“树的状态

当一个类有许多的实例,而这些实例能被同一方法控制的时候,我们便可以使用蝇量模式


优点:

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

将许多”虚拟“对象的状态集中管理;


缺点:

一旦你实现了它,那么单个的逻辑实例将无法拥有独立而不同的实现。


参考:Head First 设计模式。

0 0
原创粉丝点击