定义:
减少创建对象的数量,避免相似对象的开销,提高资源利用率。
例子:俄罗斯方块,形状相同,颜色不同。(实现目的:不同颜色的相同形状的对象为同一个对象)
//抽象享元角色
public abstract class AbstractBox {
//内部状态
public abstract String getShape();
//外部状态
void display(String color){
System.out.println("方块形状:"+getShape()+", 颜色:"+color);
}
}
//三个具体享元
public class IBox extends AbstractBox{
@Override
public String getShape() {
return "I";
}
}
public class LBox extends AbstractBox{
@Override
public String getShape() {
return "L";
}
}
public class OBox extends AbstractBox{
@Override
public String getShape() {
return "O";
}
}
//享元工厂
public class BoxFactory {
private final static Map<String,AbstractBox> abstractBoxMap = new HashMap<>();
static {
abstractBoxMap.put("I",new IBox());
abstractBoxMap.put("L",new LBox());
abstractBoxMap.put("O",new OBox());
}
public static AbstractBox getShape(String name){
return abstractBoxMap.get(name);
}
}
//客户端
public class Client {
public static void main(String[] args) {
AbstractBox iBox = BoxFactory.getShape("I");
iBox.display("灰色");
AbstractBox iBox2 = BoxFactory.getShape("I");
iBox2.display("蓝色");
System.out.println(iBox == iBox2);
}
}
结果:
方块形状:I, 颜色:灰色
方块形状:I, 颜色:蓝色
true
源码应用:
Integer:-128~127 创建好对象放到缓存中,其他会创建一个新的Integer对象
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/148682.html