您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

C++设计模式浅识享元模式

2024/3/30 19:15:21发布13次查看
享元模式(flyweight):运用共享技术有效地支持大量细粒度的对象。
四个角色类:
flyweight享元类:所有具体享元类的超类或接口,通过这个接口,flyweight可以接受并作用于外部状态。
flyweight享元工厂类:一个享元工厂,用来创建并管理flyweight,当用户请求一个flyweight时,flyweightfactory对象提供一个已创建的实例或者创建一个(如果不存在的话)。
concreteflyweight具体享元类:继承flyweight超类或实现flyweight接口,并为内部状态增加存储空间。
unsharedconcreteflyweight不需共享的具体flyweight子类、指那些不需要共享的flyweight子类。因为flyweight接口类共享成为可能,但并不强制共享。
模式实现:
[code]//享元类 class flyweight{ public: virtual void operation(int extrinsicstate){} }; //具体享元类 class concreteflyweight: public flyweight{ public: virtual void operation(int extrinsicstate)override{ std::cout << "concreteflyweight: " << extrinsicstate << std::endl; } }; //不需共享的flyweight子类 class unsharedconcreteflyweight: public flyweight{ public: virtual void operation(int extrinsicstate){ std::cout << "unsharedconcreteflyweight: " << extrinsicstate << std::endl; } }; //享元工厂,用来创建并管理flyweight对象 class flyweightfactory{ private: std::map<std::string, flyweight*> flyweights; public: flyweightfactory(){ flyweights["x"] = new concreteflyweight; flyweights["y"] = new concreteflyweight; flyweights["z"] = new concreteflyweight; } flyweight* getflyweight(std::string key){ return (flyweight*)flyweights[key]; } };
客户端:
[code]//client int main(){ //外部状态 int extrinsicstate = 22; //工厂 flyweightfactory *f = new flyweightfactory; flyweight* fx = f->getflyweight("x"); fx->operation(--extrinsicstate); //output: concreteflyweight: 21 flyweight* fy = f->getflyweight("y"); fy->operation(--extrinsicstate); //output: concreteflyweight: 20 flyweight* fz = f->getflyweight("z"); fz->operation(--extrinsicstate); //output: concreteflyweight: 19 flyweight *uf = new unsharedconcreteflyweight; //output: unsharedconcreteflyweight: 18 uf->operation(--extrinsicstate); return 0; }
享元模式好处:
如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用。
对象的大多数状态可以使用外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。
以上就是c++设计模式浅识享元模式的内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product