JAVA的字符串就是享元模式的例子。
String 声明之后就是final类型。并存到常量池。再次新建一个同样的字符串,亦然指向该常量池的地址。(五子棋,围棋)
这样就没必要创建大量的对象(类似的对象)。节省资源。
该享元模式,就是共享空间,来避免大量同样内容对象的开销。 大量颗粒的对象。
主要是区分内蕴状态(在享元对象内部,不会随着环境改变而不同,可以共享),外蕴状态(与前者相反,由客户端保存,并随着环境改变而改变,不可共享,在需要使用的时候传到 享元对象内部)。
享元抽象类:
piblic abstract class Flyweight{
public abstract void operation(int x);
}
具体享元类:
class ConcreteFlyweight extends Flyweight{
public void operation(int x){
System.out.println("共享:"+x);
}
}
相当于一个 多对象单例模式。
class FlyweightFactory{
private Set fly = new Hashtable();
public FlyweightFactory(){
fly.put("x", new ConcreteFlyweight());
}
}
我们使用的时候,直接从set中取就可以了。
如果不共享,有差别的部分。。可以定义外部状态。。外部状态 其实就是 声明。 共享类里面的一个对象。然后set到共享类中,共享类调用该类。
就实现差异化。