当前位置: 首页 > 后端技术 > Java

享元模式

时间:2023-04-01 22:40:04 Java

使用共享实现对象重用,可以大大减少对象的创建次数,避免创建大量相似对象的开销,从而提高资源利用率。在之前的单例模式中,我曾经写过一个“多实例模式”的demo。一个类可以有固定数量的对象实例。取一个并使用它。公共类MultiSingleton{privatestaticMapmultiSingletonMap=newHashMap<>();static{multiSingletonMap.put(0,newMultiSingleton());multiSingletonMap.put(1,newMultiSingleton());(2,newMultiSingleton());}privateMultiSingleton(){}publicstaticMultiSingletongetInstance(){returnmultiSingletonMap.get(newRandom().nextInt(3));类:定义享元对象需要实现的公共操作方法。在这个方法中,一个状态被用作输入参数,也称为外部状态。享元工厂类:管理一个享元对象类的缓存池,里面会存储享元对象之间需要传递的共享状态。具体享元类:享元类的实现类。实现publicinterfaceFlyweight{voidoperation();}publicclassConcreteFlyweightAimplementsFlyweight{@Overridepublicvoidoperation(){System.out.println("ClassName:"+this.getClass().getSimpleName());}}publicclassConcreteFlyweightBimplementsFlyweight{@Overridepublicvoidoperation(){System.out.println("ClassName:"+this.getClass().getSimpleName());}}publicclassFlyweightFactory{privateMapmap=newHashMap();publicFlyweightFactory(){map.put("A",newConcreteFlyweightA());map.put("B",newConcreteFlyweightB());}publicFlyweightgetFlyweight(Stringp){returnmap.get(p);}}测试publicclassFlyweightTest{@Testpublicvoidtest(){FlyweightFactoryfactory=newFlyweightFactory();享元flyweightA=factory.getFlyweight("A");享元享元B=工厂.getFlyweight("B");flyweightA.operation();flyweightB.operation();}}======结果=======ClassName:ConcreteFlyweightAClassName:ConcreteFlyweightB