当前位置: 首页 > article >正文

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

二十、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

http://www.kler.cn/a/546367.html

相关文章:

  • 成为高级前端开发师需要掌握的技术
  • 模型过拟合怎么办
  • 力扣动态规划-30【算法学习day.124】
  • 查看notebook的jupyter token
  • 从Sora到有言:3D视频生成技术的突破与应用
  • WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景
  • 欧拉函数杂记
  • Python----PyQt开发(PyQt高级:手搓一个简单的记事本)
  • Easy系列PLC 线性变换功能块(模拟量相关功能块汇总)
  • Go语言协程Goroutine高级用法(一)
  • React源码解读
  • Linux中安装open-webui报sqlite版本低的解决办法
  • MySQL无法连接到本地localhost的解决办法2024.11.8
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-23- 操作鼠标拖拽 - 番外篇(详细教程)
  • 报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant
  • error: conflicting types for ‘SSL_SESSION_get_master_key’
  • jmeter--参数化
  • vue2和vue3储存组件
  • 学习笔记-人脸识别相关编程基础
  • 14、deepseek视觉大模型Janus Pro本地部署及实战