设计模式之蝇量模式

蝇量模式:让某个类的一个实例能够用来提供多个“虚拟”实例,运用共享技术有效地支持大量细粒度的对象

特点:

  • 减少运行时对象实例的个数
  • 将许多“虚拟”对象的状态一同管理
  • 运用共享技术有效地支持大量细粒度的对象
  • 区分对象的共享变量(内部状态)和不可共享变量(外部状态,将此类变量从类从剔除,由外部传入)

用途:

  • 当一个类需要创建很多个实例,而这些实例可以被同一个方法控制

缺点:

  • 单个逻辑实例将无法拥有独立不同的行为

举例:

你需要建立很多树对象,每个树对象有三个属性:位置坐标x、y,年龄。如果为每个树创建一个对象,将造成大量的对象各自占用自己的内存空间,考虑使用蝇量模式,建立一个TreeManger对象管理多个树的属性值,并提供具体方法

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();
    }
}
时间: 2024-11-03 01:22:33

设计模式之蝇量模式的相关文章

JAVA设计模式:蝇量模式

声明:转载请说明来源:http://www.cnblogs.com/pony1223/p/7554686.html 一.引出蝇量模式 现在假设有一个项目,这个项目是为公园设计一个景观的部署,那么这个时候就会有一个问题出现,那么就是避免不了的会有一个树的类,树会很多,那么这个时候如果按照传统的方案来合计,我们会这样的设计: 然后,我们会建立很多树的对象,属性的含义分别为:x坐标,y坐标,年轮,显示的样式(比如:小树苗,参天大树等)代码如下: package study.designmode.fly

蝇量模式——HeadFirst设计模式学习笔记

蝇量模式:让某个类的一个实例能够用来提供多个"虚拟"实例,运用共享技术有效地支持大量细粒度的对象 特点: 减少运行时对象实例的个数 将许多"虚拟"对象的状态一同管理 运用共享技术有效地支持大量细粒度的对象 区分对象的共享变量(内部状态)和不可共享变量(外部状态,将此类变量从类从剔除,由外部传入) 用途: 当一个类需要创建很多个实例,而这些实例可以被同一个方法控制 缺点: 单个逻辑实例将无法拥有独立不同的行为 举例: 你需要建立很多树对象,每个树对象有三个属性:位置坐

蝇量模式(Flyweight Pattern)

蝇量模式:让某个类的一个实例能用来提供许多“虚拟实例”. 在有大量对象时,有可能造成内存溢出,把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重复创建.(JAVA中的String,如果没有则创建一个字符串保存在字符串常量池里,否则直接返回) 类图: public interface Planet { public abstract void display(int x, int y); } public class Tree implements Planet {

Head First设计模式之享元模式(蝇量模式)

一.定义 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象.我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式.由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象. 二.结构 三.实现 namespace DesignPattern

设计模式C#实现(十三)——享元模式(蝇量模式)

意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 运用共享技术有效地支持大量细粒度的对象. 适用性 当以下情况都成立时使用: 一个程序使用了大量的对象 完全由于使用大量对象造成很大存储开销 对象的大多数状态都可以变为外部状态 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象 应用程序不依赖对象标识 结构 以下摘自参考1 享元模式采用一个共享来避免大量拥有相同内容对象的开销.这种开销最常见.最直观的就是内存的损耗.享元对象能做到共享的关键是区分内蕴状态(Inte

Java 设计模式 之 鹰量模式

http://www.verejava.com/?id=16999120847970 package com.flyweight.theory; public class TestChess { public static void main(String[] args) { Chess black1=ChessFactory.getChess("黑棋"); Chess black2=ChessFactory.getChess("黑棋"); Chess white1

Head First设计模式——蝇量和解释器模式

蝇量 蝇量模式:如果让某个类的一个实例能用来提供许多“虚拟实例”,就使用蝇量模式. 在一个设计房子的平台中,周围要加上一些树,树有一个坐标XY坐标位置,而且可以根据树的年龄动态将自己绘制出来.如果我们创建许多树之后,会有许多树的实例对象.使用一个树实例和一个客户对象来维护“所有”树的状态,这就是蝇量模式. 设计类图: 实现代码: ①创建一个存储树状态的类 1 public class TreeState 2 { 3 public int X { get; set; } 4 public int

设计模式:享元模式(Flyweight)

?运用共享技术有效地支持大量细粒度的对象.又名"蝇量模式". ?在Java语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,Java会确保一个字符串常量在常量池中只有一个拷贝.譬如: String a = "abc"; String b = "abc"; System.out.println(a==b); ?输出结果:true.这就说明了a和b量引用都指

设计模式之享元模式

Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. Java中的String类型 在JAVA语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝.Stri