创建类模式大PK
创建类模式包括工厂方法模式、 建造者模式、 抽象工厂模式、 单例模式和原型模式, 它们都能够提供对象的创建和管理职责。 其中的单例模式和原型模式非常容易理解, 单例模式是要保持在内存中只有一个对象, 原型模式是要求通过复制的方式产生一个新的对象, 这两个不容易混淆。 剩下的就是工厂方法模式、 抽象工厂模式和建造者模式了, 这三个之间有较多的相似性。30.1 工厂方法模式VS建造者模式工厂方法模式注重的是整体对象的创建方法, 而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象。 我们举个简单例子来说明两者的差异, 如要制造一个超人, 如果使用工厂方法模式, 直接产生出来的就是一个力大无穷、 能够飞翔、 内裤外穿的超人; 而如果使用建造者模式, 则需要组装手、 头、 脚、 躯干等部分, 然后再把内裤外穿, 于是一个超人就诞生了。 纯粹使用文字来描述比较枯燥, 我们还是通过程序来更加清晰地认识两者的差别。30.1.1 按工厂方法建造超人首先, 按照工厂方法模式创建出一个超人, 类图如图30-1所示。图30-1 按工厂方法建造超人类图中我们按照年龄段把超人分为两种类型: 成年超人(如克拉克、 超能先生) 和未成年超人(如Dash、 Jack) 。 这是一个非常正宗的工厂方法模式, 定义一个产品的接口, 然后再定义两个实现, 通过超人制造工厂制造超人。