欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 《图解设计模式》笔记(九)避免浪费

《图解设计模式》笔记(九)避免浪费

2025/2/22 2:02:59 来源:https://blog.csdn.net/Shinka_YXS/article/details/145629018  浏览:    关键词:《图解设计模式》笔记(九)避免浪费

二十、Flyweight模式:共享对象,避免浪费

如果都用new来创建对象,将消耗大量内存。

Flyweight模式:通过尽量共享实例来避免new出实例

尽量共用已经存在的实例,这就是Flyweight模式的核心内容。

示例中,这样拼出来的叫“大型字符”

在这里插入图片描述

示例程序类图

在这里插入图片描述

big0.txt

对应的还有big1.txtbig9.txt,以及big-.txt

....######......
..##......##....
..##......##....
..##......##....
..##......##....
..##......##....
....######......
................

BigChar

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class BigChar {// 字符名字private char charname;// 大型字符对应的字符串(由'#' '.' '\n'组成)private String fontdata;// 构造函数public BigChar(char charname) {this.charname = charname;try {BufferedReader reader = new BufferedReader(new FileReader("big" + charname + ".txt"));String line;StringBuffer buf = new StringBuffer();while ((line = reader.readLine()) != null) {buf.append(line);buf.append("\n");}reader.close();this.fontdata = buf.toString();} catch (IOException e) {this.fontdata = charname + "?";}}// 显示大型字符public void print() {System.out.print(fontdata);}
}

BigCharFactory

import java.util.HashMap;public class BigCharFactory {// 管理已经生成的BigChar的实例private HashMap pool = new HashMap();// Singleton模式private static BigCharFactory singleton = new BigCharFactory();// 构造函数private BigCharFactory() {}// 获取唯一的实例public static BigCharFactory getInstance() {return singleton;}// 生成(共享)BigChar类的实例。这里是本模式的核心方法public synchronized BigChar getBigChar(char charname) {// 首先会通过pool.get()方法查找,是否存在接收到的字符(charname)所对应的BigChar类的实例。BigChar bc = (BigChar)pool.get("" + charname);if (bc == null) {// 若为null,则目前还没有创建该实例,于是通过new BigChar(charname);来生成实例,bc = new BigChar

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词