一、共享模式
共享模式:运用共享技术有效的支持大量细粒度的对象
//Flyweigth类,具有所有享元类的超类或接口
abstract class Flyweigth{
public abstract void Oeperation(int extrinsicstate);
}
//ConcreteFlyweigth是继承Flyweigth超累或实现接口,并为内部状态增加存储空间
class ConcreteFlyweigth extends Flyweigth{
@Override
public void Oeperation(int extrinsicstate) {
// TODO Auto-generated method stub
System.out.println("具体Flyweigtj"+extrinsicstate);
}
}
//UnsharedConcreteFlyweigth是指那些不需要共享的Flyweigth子类。
class UnsharedConcreteFlyweigth extends Flyweigth{
@Override
public void Oeperation(int extrinsicstate) {
// TODO Auto-generated method stub
System.out.println("不具体Flyweigth"+extrinsicstate);
}
}
//FlyweigthFactory是Flyweigth的工厂类,用来创建和管理Flyweigth对象,主要用来确保合理地共享Flyweigth。
class FlyweigthFactory{
private Hashtable flyweigths=new Hashtable();
public FlyweigthFactory() {//初始化工厂时,先生成三个实例。
flyweigths.Add("X",new ConcreteFlyweigth());
flyweigths.Add("Y",new ConcreteFlyweigth());
flyweigths.Add("Z",new ConcreteFlyweigth());
}
public Flyweigth GetFlyweigth(String key) {
return (Flyweigth)flyweigth[key];//根据客户端需要获取已生成地实例
}
}
public class xy {
public static void main(String[] args) {
// TODO Auto-generated method stub
int extrinsicstate=22;//代码外部状态
FlyweigthFactory f-new FlyweigthFactory();
Flyweigth fx=f.GetFlyweigth("X");
fx.Oeperation(extrinsicstate);
Flyweigth fy=f.GetFlyweigth("Y");
fy.Oeperation(extrinsicstate);
Flyweigth fz=f.GetFlyweigth("Z");
fz.Oeperation(extrinsicstate);
UnsharedConcreteFlyweigth uf=new UnsharedConcreteFlyweigth();
uf.Oeperation(extrinsicstate);
}
}