享元设计模式

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);
    }
}
相关推荐
山甫aa2 分钟前
日志技术 Logback + Slf4j —— 从零开始的 Web 后端学习
java·后端·学习·web·logback
韶博雅6 分钟前
开启补充日志
java·开发语言·sql
FYKJ_201015 分钟前
django学习成绩预警系统10905
java·javascript·spring boot·python·spark·django·php
卓怡学长24 分钟前
w192基于springboot教务管理系统
java·数据库·spring boot·spring·maven·intellij-idea
逸Y 仙X28 分钟前
Spark SQL
java·大数据·sql·spark
码农颜29 分钟前
6.4.1 监听连接
java·数据库·mysql
mldong29 分钟前
会签三兄弟:并行/串行/按比例的实现与取舍
java·架构
被怪兽吃掉了30 分钟前
5.2.1一维组数定义方式
开发语言·c++·算法
TheBestRucy38 分钟前
Python 九阳神功之肆:网络编程 · Socket 从入门到实战
开发语言·网络·python
j7~41 分钟前
【C++】《C++二叉搜索树(BST)从入门到精通:概念、实现与Key/Value模型全解析》
开发语言·c++·学习·二叉搜索树