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);
}
}