1.前言
- 设计模式共有23种(点击这里查看更多分类),根据目的准则分类,分为三类
- 创建型设计模式,共5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
- 结构型设计模式,共7中:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、响元模式。
- 行为设计模式,共11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
- 这里介绍一下响元模式。
2.特点
- 定义:利用共享的技术避免创建多个对象。享元可以理解为共享,主要目的是为了避免创建有共性的多个重复对象所带来的巨大内存占用和性能问题。
2.1.代码说明
画笔操作类,如下:
public class PaintOperation {
private String mPaint;
private String type;
public PaintOperation(String paint) {
mPaint = paint;
}
public void setType(String type) {
this.type = type;
}
public void draw() {
System.out.println("用" + mPaint + "绘制一个" + type);
}
}
画笔工厂类,如下:
public class PaintFactory {
private final HashMap<String, PaintOperation> paintHashMap = new HashMap<>();
public PaintOperation execute(String paint) {
PaintOperation operation = paintHashMap.get(paint);
if (operation == null) {
operation = new PaintOperation(paint);
paintHashMap.put(paint, operation);
System.out.println("----创建--" + paint);
}
return operation;
}
}
调用,如下:
PaintFactory paintFactory = new PaintFactory();
PaintOperation paint1 = paintFactory.execute("铅笔");
paint1.setType("圆形");
paint1.draw();
PaintOperation paint2 = paintFactory.execute("铅笔");
paint2.setType("三角形");
paint2.draw();
PaintOperation paint3 = paintFactory.execute("水笔");
paint3.setType("菱形");
paint3.draw();
//--------打印结果--------
System.out: ----创建--铅笔
System.out: 用铅笔绘制一个圆形
System.out: 用铅笔绘制一个三角形
System.out: ----创建--水笔
System.out: 用水笔绘制一个菱形
//这里的创建铅笔只走了一次
2.2.优缺点
- 优点:减少了对象的创建,提高了效率
- 缺点:增加了项目的复杂度
2.3.使用场景
- 有多个具有共性的对象需要new
3.总结
有疑问可以留言!
4.最后
开通了个公众号,扫码关注一下,有可以获得超过1个G的免费PDF书籍学习资料,并且可以及时收到我分享的内容哦!