享元设计模式

java 复制代码
package com.jmj.pattern.flyweight;

public abstract class AbstractBox {

    //获取图形的方法
    public abstract String getShape();

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




}
java 复制代码
package com.jmj.pattern.flyweight;

import java.util.HashMap;

/**
 * 将该类设计为工厂类 单例模式
 */
public class BoxFactory {

    private HashMap<String,AbstractBox> map;

    private BoxFactory(){
        map =new HashMap<>();
        map.put("I",new IBox());
        map.put("O",new OBox());
        map.put("L",new LBox());
    }

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

    public AbstractBox getShape(String name){
        return map.get(name);
    }


}
java 复制代码
package com.jmj.pattern.flyweight;

public class IBox extends AbstractBox{
    @Override
    public String getShape() {
         return "I";
    }
}
java 复制代码
package com.jmj.pattern.flyweight;

public class LBox extends AbstractBox{
    @Override
    public String getShape() {
         return "L";
    }
}
java 复制代码
package com.jmj.pattern.flyweight;

public class OBox extends AbstractBox{
    @Override
    public String getShape() {
         return "O";
    }
}
java 复制代码
package com.jmj.pattern.flyweight;

public class Client {
    public static void main(String[] args) {
        AbstractBox i = BoxFactory.getInstance().getShape("I");
        i.diplay("灰色");
        AbstractBox l = BoxFactory.getInstance().getShape("L");
        l.diplay("灰色");
        AbstractBox o = BoxFactory.getInstance().getShape("O");
        o.diplay("灰色");
        AbstractBox a = BoxFactory.getInstance().getShape("I");
        a.diplay("红色");
        System.out.println(i==a);
    }
}
相关推荐
weixin_468466852 分钟前
Markitdown 文档解析快速入门指南
开发语言·python·自动化·编程
我命由我123453 分钟前
SEO 与 GEO 极简理解
java·linux·运维·开发语言·学习·算法·运维开发
金銀銅鐵5 分钟前
[Java] 自己写程序,来解析方法的 descriptor
java·后端
Yang96119 分钟前
0.5 米超短盲区!鼎讯信通 GO-50PRO 光时域反射仪科普
开发语言·后端·golang
红辣椒...12 分钟前
codex+第三方模型
java·服务器·前端
老码观察14 分钟前
设计模式实战解读(八):代理模式——控制访问的隐形中间层
设计模式·代理模式
不会C语言的男孩14 分钟前
C++ Primer Plus 第12章:类和动态内存分配
开发语言·c++
一个做软件开发的牛马22 分钟前
Java 继承与多态:从"是什么"到"能做什么"的设计思维
java·后端
不懂的浪漫32 分钟前
05|Netty ByteBuf 源码分析:为什么不用 Java ByteBuffer
java·netty
阿里嘎多学长36 分钟前
2026-05-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管