时间:2025-02-02 17:38
人气:
作者:admin
编辑
编辑
编辑
编辑
// 享元角色
public abstract class AbstractBox {
// 获取图形
public abstract String getShape();
// 显示图形及颜色
public void display(String color){
System.out.println("方块:" + getShape() + ",颜色:" + color);
}
}
// 具体享元角色——I
public class IBox extends AbstractBox{
@Override
public String getShape() {
return "I";
}
}
// 具体享元角色——L
public class LBox extends AbstractBox{
@Override
public String getShape() {
return "L";
}
}
// 具体享元角色——O
public class OBox extends AbstractBox{
@Override
public String getShape() {
return "O";
}
}
// 享元工厂(静态内部类单例方式)
public class BoxFactory {
// 享元对象池
private Map<String, AbstractBox> boxes;
// 私有化构造器
private BoxFactory() {
boxes = new HashMap<>();
boxes.put("L", new LBox());
boxes.put("I", new IBox());
boxes.put("O", new OBox());
}
// 获取享元对象
public AbstractBox getBox(String type) {
return boxes.get(type);
}
// 创建静态内部类
private static class SingletonHolder {
private static final BoxFactory INSTANCE = new BoxFactory();
}
// 获取享元工厂实例
public static BoxFactory getInstance() {
return SingletonHolder.INSTANCE;
}
}
// 客户端
public class Client {
public static void main(String[] args) {
// 1.获取享元工厂
BoxFactory boxFactory = BoxFactory.getInstance();
// 2.获取享元对象
AbstractBox box1 = boxFactory.getBox("L");
AbstractBox box2 = boxFactory.getBox("I");
AbstractBox box3 = boxFactory.getBox("O");
AbstractBox box4 = boxFactory.getBox("O");
// 3.获取非享元对象并显示
box1.display("red");
box2.display("blue");
box3.display("green");
box4.display("yellow");
// 4.验证享元对象是否共享
System.out.println(box3 == box4);
}
}
编辑
编辑
编辑
编辑
上一篇:常用的设计模式
下一篇:关于设计模式的一点想法