设计模式-享元模式
运用共享技术有效地支持大量细粒度的对象
在享元对象内部并且不会随环境变化而改变的共享部分,可以称为是享元对象的内部状态,而随环境改变而改变的、不可共享的状态就是外部状态
我们以多颜色的笔举例
先看笔的抽象类和具体实现
public interface Pen {
void write(String content);
}
public class ConcretePen implements Pen {
private String color;
public ConcretePen(String color) {
this.color = color;
}
@Override
public void write(String content) {
System.out.println(this.color + "字迹: " + content);
}
}
然后实现工厂类
public class PenFactory {
Map<String, Pen> penCollector = new HashMap<>();
public Pen getPen(String color){
Pen pen = penCollector.get(color);
if (pen == null) {
System.out.println("买一支" + color + "的笔");
pen = new ConcretePen(color);
penCollector.put(color, pen);
}
return pen;
}
}
示例调用
public class Demo {
public static void main(String[] args) {
PenFactory factory = new PenFactory();
factory.getPen("黑色").write("画一条彩虹");
factory.getPen("红色").write("红色的一条");
factory.getPen("橙色").write("橙色的一条");
factory.getPen("黄色").write("黄色的一条");
factory.getPen("黑色").write("真好看的彩虹");
}
}