享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
意图
运用共享技术有效地支持大量细粒度的对象。
实现
我们要实现如下
我们有一个图形工厂,可以创建多种图形,我们要从中大量的取得图形
- 创建工厂
public class Shape{
private String shape;
public Shape(String shape){
this.shape =shape;
}
public void draw(){
System.out.println("绘制 "+shape);
}
}
public class ShapeFactroy{
public Shape getShape(String s){
return new Shape(s);
}
}
- 添加保存功能
修改下工厂类
public class ShapeFactroy{
private HashMap<String,Shape> map = new HashMap<>();
public Shape getShape(String s){
Shape shape = map.get(s);
if (shape == null){
shape = new Shape(s);
map.put(s,shape);
System.out.println("添加 "+shape);
}
return shape;
}
}
- 循环使用
public void main(String... args) {
ShapeFactroy factroy = new ShapeFactroy();
factroy.getShape("矩形").draw();
factroy.getShape("正方形").draw();
factroy.getShape("圆形").draw();
factroy.getShape("矩形").draw();
factroy.getShape("长方形").draw();
factroy.getShape("矩形").draw();
}
- 结果
I/System.out: 添加 矩形
I/System.out: 绘制 矩形
I/System.out: 添加 正方形
I/System.out: 绘制 正方形
I/System.out: 添加 圆形
I/System.out: 绘制 圆形
I/System.out: 绘制 矩形
I/System.out: 添加 长方形
I/System.out: 绘制 长方形
I/System.out: 绘制 矩形