一、问题
1、小型的外包项目,给客户做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求有些不同。
2、有客户要求以新闻的形式发布
3、有客户要求以博文的形式发布
4、有客户希望以公众号的形式发布
二、享元介绍
1、享元模式(Flyweight Pattern) 也叫蝇量模式,运用共享技术有效的支持大量细粒度的对象。
2、常用与系统底层开发,解决系统的性能问题,像数据库连接池,里面都是创建好的连接对象,在这些对象中有我们需要的则直接拿来用,避免重复创建,如果没有我们需要的则创建一个。
3、享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,可以冲缓冲池里那,这样可以降低系统内存,同时提高效率。
4、应用场景:String 常量池、数据库连接池、缓冲池。
三、内部状态、外部状态
1、内部状态:值对象共享出来的信息,存储在享元对象内部且不会随环境的改变而改变
2、外部状态:指对象得以依赖的一个标记,是随环境改变而改变的、不可共享的状态
四、注意事项
1、有大量对象,并且消耗内存,且对象的状态大部分可以外部化时= > 考虑享元模式
2、用唯一表示码,如果内存中有,则返回一个唯一标识码的对象,用HashMap、HashTable存储。也要考虑是否有并发
3、降低对象的创建,降低程序的内存使用,提高效率。
4、增加了系统的复杂度,需要分离出内部状态和外部状态,而外部状态具有固化特性,不应该随着内部状态的变化而变化。
5、使用时注意划分内部状态和外部状态,并使用一个工厂类加以控制。