工厂减少了需要从对象创建代码创建对象的代码之间的耦合。不是通过调用类构造函数来显式地创建对象,而是通过调用一些代表调用者创建对象的函数。下面是一个简单的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小提琴为上述示例。