结构型模式-享元模式

2023-11-09

 

package per.mjn.pattern.flyweight;

// 抽象享元角色
public abstract class AbstractBox {

    // 获取图形的方法(内部状态)
    public abstract String getShape();

    // 显示图形及颜色(传递外部状态)
    public void display(String color) {
        System.out.println("方块形状:" + getShape() + ", 颜色:" + color);
    }

}
package per.mjn.pattern.flyweight;

// I图形类(具体享元角色)
public class IBox extends AbstractBox {

    @Override
    public String getShape() {
        return "I";
    }
}
package per.mjn.pattern.flyweight;

// L图形类(具体享元角色)
public class LBox extends AbstractBox {

    @Override
    public String getShape() {
        return "L";
    }
}
package per.mjn.pattern.flyweight;

// O图形类(具体享元角色)
public class OBox extends AbstractBox {

    @Override
    public String getShape() {
        return "O";
    }
}
package per.mjn.pattern.flyweight;

import java.util.HashMap;

// 工厂类,将该类设计为单例
public class BoxFactory {

    private HashMap<String, AbstractBox> map;

    private static BoxFactory factory = new BoxFactory();

    // 在构造方法中进行初始化操作
    private BoxFactory() {
        map = new HashMap<String, AbstractBox>();
        map.put("I", new IBox());
        map.put("L", new LBox());
        map.put("O", new OBox());
    }

    // 提供一个方法获取该工厂类对象
    public static BoxFactory getInstance() {
        return factory;
    }

    // 根据名称获取图形对象
    public AbstractBox getShape(String name) {
        return map.get(name);
    }
}
package per.mjn.pattern.flyweight;

public class Client {

    public static void main(String[] args) {

        // 获取I图形对象
        AbstractBox box1 = BoxFactory.getInstance().getShape("I");
        box1.display("red");

        // 获取L图形对象
        AbstractBox box2 = BoxFactory.getInstance().getShape("L");
        box2.display("green");

        // 获取O图形对象
        AbstractBox box3 = BoxFactory.getInstance().getShape("O");
        box3.display("blue");

        // 获取O图形对象
        AbstractBox box4 = BoxFactory.getInstance().getShape("O");
        box3.display("yellow");

        System.out.println(box3 == box4);
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构型模式-享元模式 的相关文章

随机推荐

  • 计数dp

    给一个数n n lt 1000 问将这个n分解成n1 n2 n3 nk的解法有多少 k gt 1 且 n1 gt n2 gt n3 gt nk gt 1 由于答案可能过大 因此答案对1e9 7取模 1 背包问题解决 这里可看作 结果恰好为n
  • 著名人物的博客

    经济学界 Gary Becker Richard Posner 世界著名经济学家 Gary Becker为诺贝尔经济学奖得主 http becker posner blog com Gregory Mankiw 哈佛大学经济学教授 http
  • 基于C++的QT实现贪吃蛇小游戏

    文章目录 一 效果演示 二 实现思路 三 代码实现 widget h widget cpp main cpp 一 效果演示 效果图 代码下载 二 实现思路 通过按键控制蛇的移动 每吃一个商品蛇身就会加长 如果蛇身头尾相碰就结束游戏 声明渲染
  • TSI系统测量参数之:转速和零转速

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 1 零转速与转速 1 零转速 主要用在汽机转速到零时投盘车的连锁以及对大机转速的
  • mac下的各种sed、grep、ag命令查看日志好用

    sed命令 删除文件的前100行 注意mac上要加个空字符串 sed i 1 100d 404 log 查看文件若干行 输出文件的5 8行 sed n 5 8p 1156 success txt 输出文件的5 8行至11 txt sed n
  • 动态DPC算法学习

    造成坏点的原因 感光元件芯片自身工艺技术瑕疵造成 光线采集存在缺陷 制造商产品差异 坏点分类 hot pixel 固定保持较高的像素值 一般呈现为画面高亮的点 dead pixel 固定保持较低的像素值 一般在画面中呈现为暗点 noise
  • 华为OD机试-磁盘容量排序

    题目描述 磁盘的容量单位常用的有M G T 他们之间的换算关系为 1T 1024G 1G 1024M 现在给定n块磁盘的容量 请对他们按从小到大的顺序进行稳定排序 例如给定5块盘的容量 5 1T 20M 3G 10G6T 3M12G9M 排
  • CSS基础学习——动画

    一 CSS3 2D变形 利用Transfrom方法 1 rotate angle 元素顺时针旋转给定的角度 允许负值 元素将逆时针旋转
  • Winner Winner【模拟、位运算】

    Winner Winner 题目链接 点击 题目描述 The FZU Code Carnival is a programming competetion hosted by the ACM ICPC Training Center of
  • python爬虫是干嘛的?python爬虫能做什么?

    Python爬虫是什么 Python爬虫是由Python程序开发的网络爬虫 webspider webrobot 是按照一定规则自动抓取万维网信息的程序或脚本 其实一般是通过程序在网页上获取你想要的数据 也就是自动抓取数据 爬虫又被称为网络
  • golang 详解协程——errgroup

    为什么要有sync errgroup go支持并发 一般采用的是 channel sync WaitGroup context 来实现各个协程之间的流程控制和消息传递 但是对于开启的成千上万的协程 如果在每个协程内都自行去打印 错误日志的话
  • 关于K-means的通俗理解

    机器学习通俗理解系列 关于knn的通俗理解 文章目录 前言 一 什么是K means 二 什么原理 三 重点 1 K值的选定 2 样本之间的距离 四 优缺点 五 优化进阶 总结 前言 刚学习机器学习的时候免不了百度 问什么是K means
  • vue3运行npm run serve报错ERROR Error: Cannot find module ‘babel-plugin-import‘ Require stack:

    1 完整报错 gt ims support demo 0 1 0 serve Users yizhikaixinya Desktop charmplus ims gt vue cli service serve ERROR Error Ca
  • 实验SparkSQL编程初级实践

    实验SparkSQL编程初级实践 实践环境 Oracle VM VirtualBox 6 1 12 Ubuntu 16 04 Hadoop3 1 3 JDK1 8 0 162 spark2 4 0 python3 5 Windows11系统
  • 领域建模

    忙碌的过着周末 一边思考如何建设自己知识体系 另外一遍白板的各种算法在脑袋互相争抢时间 低音炮单曲循环的的Ava Max Salt 心 静下来 环境燥起来 思绪继续飞行 前期读了一半的书 重新拿起 在建模方式上理解场景方法的研究 之前分享的
  • asp.net zero 8.2 学习-3-添加实体,并迁移到数据库

    系列目录 asp net zero 8 2 学习 1 安装 asp net zero 8 2 学习 2 创建一个页面 asp net zero 8 2 学习 3 添加实体 并迁移到数据库 asp net zero 8 2 学习 4 创建接口
  • 压缩伪影的探讨

    1 压缩伪影的由来 常用的视频编码器中 在一个框架中使用了多种编码方法 01 预测编码 不编码预测值 而是编码预测值与实际值的差值 02 变换编码 对信号的样本值进行某种形式的函数变换 从一种空间变换到另一种空间 然后再根据信号在另一个空间
  • SOA中国路线图活动感受

    下午参加了SOA中国路线图活动 主要由普元公司和相关的媒体以及电信客户进行演讲 对于SOA我之前一直认为是个很虚的东西 概念大于实践 但听了普元公司黄柳青博士的介绍以及在电信领域中的应用 感觉还是有收获的 很多思想可以应用到系统的设计和开发
  • 数据结构——红黑树

    1 什么是红黑树 红黑树是一种特定类型的二叉树 用于组织数据 它是一种平衡二叉查找树 AVL树 的变体 每个结点都带有颜色属性 红色或黑色 在红黑树中 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长 具体来说 红黑树满足以下性质 每
  • 结构型模式-享元模式

    package per mjn pattern flyweight 抽象享元角色 public abstract class AbstractBox 获取图形的方法 内部状态 public abstract String getShape