抽象工厂 抽象工厂模式英語Abstract factory pattern是一种软件开发设计模式抽象工厂模式提供了一种方式可以将一组具有同一主题的单独的工厂封装起来在正常使用中客户端程序需要创建抽象工厂的具体实现然后使用抽象工厂作为接口来创建这一主题的具体对象客户端程序不需要知道或关心它从这些内部的工厂方法中获得对象的具体类型因为客户端程序仅使用这些对象的通用接口抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来 举个例子来说比如一个抽象工厂类叫做DocumentCreator文档创建器此类提供创建若干种产品的接口包括createLetter创建信件和createResume创建简历其中createLetter返回一个Letter信件createResume返回一个Resume简历系统中还有一些DocumentCreator的具体实现类包括FancyDocumentCreator和ModernDocumentCreator这两个类对DocumentCreator的两个方法分别有不同的实现用来创建不同的信件和简历用FancyDocumentCreator的实例可以创建FancyLetter和FancyResume用ModernDocumentCreator的实例可以创建ModernLetter和ModernResume这些具体的信件和简历类均继承自抽象类即Letter和Resume类客户端需要创建信件或简历时先要得到一个合适的DocumentCreator实例然后调用它的方法一个工厂中创建的每个对象都是同一个主题的fancy或者modern客户端程序只需要知道得到的对象是信件或者简历而不需要知道具体的主题因此客户端程序从抽象工厂DocumentCreator中得到了Letter或Resume类的引用而不是具体类的对象引用 工厂是创建产品对象的地方其目的是将产品的创建与产品的使用分离抽象工厂模式的目的是将若干抽象产品的接口与不同主题产品的具体实现分离开这样就能在增加新的具体工厂的时候不用修改引用抽象工厂的客户端代码 使用抽象工厂模式能够在具体工厂变化的时候不用修改使用工厂的客户端代码甚至是在运行时然而使用这种模式或者相似的设计模式可能给编写代码带来不必要的复杂性和额外的工作正确使用设计模式能够抵消这样的额外工作