在使用上,建造者模式和享元模式有何不同?因为它们都处理大量对象。
建造者模式用于创建许多对象,而享元模式则是关于共享这样一组对象。
这两种模式都涉及到“组合”,即一个对象可能有几个元素,但它们不一定要一起使用。享元的原型用例是在文本编辑器应用程序中反复使用几十个字符对象池(这是在“GoF”书籍中给出的示例)。
当“需要操作许多对象,并且这些对象不能承受无关数据”时,使用享元模式是合适的。在Java中,String对象被管理为享元。Java将所有固定的String文字放入文字池中。对于冗余文字,Java只在池中保留一份副本。
使享元工作的关键是使用工厂方法或构建器设计模式来控制对象实例化。工厂方法的工作仅是创建对象:根据输入条件返回适当类型的对象。
抽象工厂与构建器类似,它也可以构建复杂对象。主要区别在于Builder模式侧重于逐步构建复杂对象。抽象工厂的重点是产品对象的系列(简单或复杂)。