享元模式:采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。
抽象享元角色(Flyweigtht):为具体享元角色规定了必须实现的方法,而外蕴状态就是以参数的形式通过此方法传入。
具体享元角色(ConcreteFlywight):实现抽象角色规定的方法。如果存在内蕴状态,就负责为内蕴状态提供存储空间。
复合享元角色(UnsharedConcreteFlywight):它所代表的对象是不可以共享的,并且可以分解成为多个单纯享元对象的组合。
享元工厂角色(FlyweigthtFactory):负责创建和管理享元角色。要想达到共享的目的,这个角色的实现是关键。
享元模式的优缺点:享元模式的优点在于它大幅度地降低内存中对象的数量。但是,它做到这一点所付出的代价也是很高的:
1、享元模式使得系统更加复杂。为了使对象可以共享,需要将一些状态外部化,这使得程序的逻辑复杂化。
2、享元模式将享元对象的状态外部化,而读取外部状态使得运行时间稍微变长。
享元模式的使用场景:1、当我们发现某个类型的对象有大量的实例时,我们是否可以对这些实例进行分类,经过分类后,我们发现只有很少的类别的情况下。
2、我们发现通过使用享元模式后能够提高系统的性能和不会带来更多的复杂度时。