一、什么是享元模式?
定义: 主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
通俗理解: 就是使用已经存在的对象,而非再去创建对象,项目中其实我们经常用,只是不知道其实是享元模式,比如使用HashMap缓存键值对,当去创建对象是,去map中查找是否存在键,如果存在,直接返回对象,否则创建新的对象,并且放到map中。当然这只是享元模式的一个简单案例。
二、角色?
1、抽象享元对象(可无)
2、具体享元对象—>需要共享的对象
3、享元对象的工厂—>创建对象,缓存对象
三、使用场景?
1、系统有大量相似对象。 2、需要缓冲池的场景。
三、案例? 比如随机创建获取一个圆形。
角色一: 抽象享元对象: IShape
角色二: 具体享元对象: Circle
角色三: 享元工厂
public interface IShape {
void draw();
}
public class Circle implements IShape {
private int radius;
public Circle(int radius) {
this.radius = radius;
}
@Override
public void draw() {
Log.i("zqr", "绘制了一个半径为:" +radius);
}
}
public class CircleFactory {
private static HashMaphashMap =new HashMap<>();
public static IShapegetCircle(int radius) {
// 没必要每次都创建,可以判断存在半径为radius的圆,就使用已有的
Circle circle;
synchronized (hashMap) {
circle =hashMap.get(radius);
if (circle ==null) {
circle =new Circle(radius);
hashMap.put(radius, circle);
}
}
return circle;
}
}
网友评论