Design patterns 简单工厂(Java)

示例

工厂减少了需要从对象创建代码创建对象的代码之间的耦合。不是通过调用类构造函数来显式地创建对象,而是通过调用一些代表调用者创建对象的函数。下面是一个简单的Java示例:

interface Car {
}

public class CarFactory{
  static public Car create(String s) {
    switch (s) {
    default:
    case "us":
    case "american": return new Chrysler();
    case "de":
    case "german": return new Mercedes();
    case "jp":
    case "japanese": return new Mazda();
    }
  }
}

class Chrysler implements Car {
  public String toString() { return "Chrysler"; }
}

class Mazda implements Car {
  public String toString() { return "Mazda"; }
}

class Mercedes implements Car {
  public String toString() { return "Mercedes"; }
}

public class CarEx {
  public static void main(String args[]) {
    Car car = CarFactory.create("us");
    System.out.println(car);
  }
}

在此示例中,用户仅给出了有关其需求的提示,而工厂可以自由地构造适当的东西。这是一个依赖倒置:Car概念的实现者可以自由返回Car用户请求的适当的具体对象,而后者又不知道所构建具体对象的详细信息。

这是工厂工作方式的一个简单示例,当然在此示例中,总是可以实例化具体类。但是可以通过将具体的类隐藏在包中来防止这种情况,从而迫使用户使用工厂。

.Net小提琴为上述示例。