享元设计模式

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);
    }
}
相关推荐
spencer_tseng10 分钟前
Stream not available [SysDictDataMapper.xml]
xml·java
蒸蒸yyyyzwd5 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
睡美人的小仙女1275 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
程序员徐师兄6 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
rayufo6 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk6 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
缺点内向6 小时前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
五岳6 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
一起养小猫7 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
zhougl9967 小时前
Java 所有关键字及规范分类
java·开发语言