工厂模式的实现方式有很多,有单一的工厂类,有和产品的继承结构对应的,树状继承的工厂类,也有置于某个类中的工厂方法。就我个人而言,感觉比较常用的是最后一种。
先说一下我认为的工厂的意义。我觉得主要有二,一是对一系列抽象类的实现类提供一个统一的构造者,省得api使用者吃力地区分一堆相似却又不同的类名。我觉得这种情况下比较简洁的形式是对该抽象类添加一个静态的方法,用于制造该类的实现类。创造哪一种实现类,就由静态方法的参数来决定,这个参数可以是一个enum,enum中的每一项对应一个实现类。我们可以看一个例子