GOF意图:运用共享技术有效地支持大量细粒度的对象
Flyweight模式是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用,所以叫享元。
此模式解决的是由于大量的细粒度对象所造成的内存开销的问题,它在实际的开发中并不常用,但是作为底层的提升性能的一种手段却很有效
角色:
享元工厂(FlyweightFactoiy)角色:维持一个享元列表,并且负责创建和查询
抽象享元角色(Flyweight):提供唯一标识状态,可以让工厂检索。
具体享元(ConcreteFlyweight)角色:
不可以共享享元(UnsharableFlyweight)角色:复合享元角色所代表的对象是不可以共享的,但是一个复合享元对象可以分解成为多个本身是单纯享元对象的组合。复合享元角色又称做不可共享的享元对象。这个角色一般很少使用。
客户端(Client)角色:。
实现:享元模式就相当于加一个缓存,共用细粒度对象。
使用场景:
比如,在QQ聊天的时候很多时候你懒得回复又不得不回复的时候,一般会用一些客套的话语敷衍别人,如"呵呵","好的"等等之类的,这些简单的答复其实每个人都是提前定义好的,在使用的时候才调用出来.Flyweight就是基于解决这种问题的思路而产生的,当需要一个可以在其它地方共享使用的对象的时候,先去查询是否已经存在了同样的对象,如果没有就生成之有的话就直接使用.因此,Flyweight模式和Factory模式也经常混用。