工厂模式专门将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪个类。工厂模式有以下几种形态:
- 简单工厂模式(Simple Factory):又称静态工厂模式(Static Factory Method Pattern) 
- 工厂方法模式(Factory Method): 又称多态性工厂模式或虚拟构造子模式 
- 抽象工厂模式(Abstract Factory): 又称工具箱模式(Kit或ToolKit) 
简单工厂模式
简单工厂模式,或称静态工厂方法模式,是不同的工厂方法的一个特殊实现。
简单工厂模式,或称静态工厂方法模式,是不同的工厂方法的一个特殊实现。比如有一个农场公司,专门向市场销售各类水果,我们会真么描述这个系统:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | public interface Fruit {
 
 void grow();
 
 
 void harvest();
 
 
 void plant();
 
 }
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | public class Apple implements Fruit {
 private int treeAge;
 
 public int setTreeAge(int treeAge) {
 this.treeAge = treeAge;
 }
 
 public int getTreeAge() {
 return this.treeAge;
 }
 
 
 * 生长
 */
 public void grow() {
 System.out.println("Apple is growing...");
 }
 
 
 * 种植
 */
 public void harvest() {
 System.out.println("Apple is harvest.");
 }
 
 
 * 收获
 */
 public void plant() {
 System.out.println("Apple has ben planted.");
 }
 }
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | public class Grape implements Fruit {
 private boolean seedless;
 
 public int setSeedless(boolean seedless) {
 this.seedless = seedless;
 }
 
 public int getTreeAge() {
 return this.seedless;
 }
 
 
 * 生长
 */
 public void grow() {
 System.out.println("Grape is growing...");
 }
 
 
 * 种植
 */
 public void harvest() {
 System.out.println("Grape is harvest.");
 }
 
 
 * 收获
 */
 public void plant() {
 System.out.println("Grape has ben planted.");
 }
 }
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | public class FruitGardener {
 
 * 静态工厂方法
 */
 public static Fruit factory(String which) {
 
 switch(name) {
 case "apple":
 return new Apple();
 break;
 case "grape":
 return new Grape();
 break;
 default:
 return null;
 break;
 }
 }
 }
 
 | 
| 12
 
 | FruitGardener.factory("apple");FruitGardener.factory("grape");
 
 | 
总结:简单工厂模式涉及到工厂角色、抽象产品角色以及具体产品角色3个角色
- 工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体java类实现。
- 抽象产品(Product)角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或它们有共同的接口。抽象产品角色可以由用一个java接口或java抽象类实现。
- 具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体Java类实现。