享元模式Flyweight

  • 享元模式是对于某个对象的共享的模式,譬如String,对于相同内聚属性的对象,系统只生成一个,这样就大大减少了系统的开销。
  • 享元模式分为:抽象享元角色,具体享元,享元工厂,客户端。其中,具体享元是可以被共享的部分。但是客户端不实际生成具体享元,而是由享元工厂生成享元。工厂生产享元的时候,判断该享元是否创建过,从而达到已经创建过,或者存在享元可以不再重复创建就被客户端使用
  • 单纯享元模式和复合享元模式从本质上来说没有区别,只是复合享元模式是单纯享元模式与合成模式的结合,复合享元模式里面的享元可能是树枝,树枝下面的树叶是能够共享的,对于复合享元模式,客户端也是看不见的。这部分内容是在工厂方法内部的逻辑里面进行的。也就是每生成一个树枝,工厂方法会扫描树枝下面的树叶是否已经生成,这样能够保证树叶的共享特质
  • 复合享元模式比单纯享元模式躲了一个复合享元的角色,复合享元由具体享元说组成
  • 对象有内蕴状态和外蕴状态,通过设计,我们可以把具有相同内蕴状态,不同外蕴状态的对象视作具体享元,在系统中公用。譬如咖啡店的咖啡Order,咖啡口味是内蕴状态,咖啡桌号是外蕴状态
  • 享元模式的使用范围:一个系统有大量对象,并耗费大量内存,对象状态中大部分可以外部化,可以按照内蕴状态分别(即一个内蕴状态多个外蕴状态),相同内蕴状态的对象对于客户端是不可区分的;

你可能感兴趣的:(设计模式)