Flyweight模式一.意图运用共享技术有效地支持大量细粒度的对象
二.适用性1、一个应用程序使用了大量的对象
2、完全由于使用大量的对象,造成很大的存储开销
3、对象的大多数状态都可变为外部状态
4、如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象
5、应用程序不依赖于对象标识
由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值
三.实例:设计一个图书的管理系统,每本书都有出版社、编号、作者、价钱等的属性,所以这个书的类可以这样设计:classBook{public:stringGetPublish(){returnm_publishCompany;}stringGetWriter(){returnm_writer;}intGetBookID(){returnm_bookID;}intGetPrice(){returnm_price;}stringGetName(){returnm_name;}voidSetPublish(string&s){m_publishCompany=s;}voidSetWriter(string&s){m_writer=s;}voidSetBookID(intid){m_bookID=id;}voidSetPrice(intprice){m_price=price;}voidSetName(string&s){m_name=s;}private:stringm_publishCompany;//出版社stringm_writer;//作者intm_bookID;//书籍编号intm_price;//价钱stringm_name;//书名};这非常自然
但是随着系统的开发和试运行,这种设计就表现出一些不足的地方了,例如一般图书会非常多,成千上万本,在这些书中可能会有相同的出版社或者相同的作者,那