设计模式1——Abstract Factory
Abstract Factory(抽象工厂)——对象创建型模式
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:
一个系统要独立于它的产品的创建、组合和表示时。 一个系统要由多个产品系列中的一个来配置时。 当你要强调一系列相关的产品对象的设计以便进行联合使用是。 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
结构:

参与者:
AbstractFactory 声明一个创建抽象产品对象的操作接口。
ConcreteFactory 实现创建具体产品对象的操作。
AbstractProduct 为一类产品对象声明一个接口。
ConcreteProduct 定义一个将被相应的具体工厂创建的产品对象。
实现AbstractProduct接口。
Client 仅使用由AbstractFactory和AbstractProduct类声明的接口。
协作:
通常在运行时刻创建一个ConcreteFactory类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。
AbstractFactory将产品对象的创建延迟到它的ConcreteFactory子类。
效果:
AbstractFactory模式有下面的一些优点和缺点:
优点:
public interface WidgetFactory { public Window createWindow(); public ScrollBar createScrollBar(); } public class MotlfWidgetFactory implements WidgetFactory { @Override public ScrollBar createScrollBar() { return new MoltfScrollBar(); } @Override public Window createWindow() { return new MoltfWindow(); } } public class PMWidgetFactory implements WidgetFactory { @Override public ScrollBar createScrollBar() { return new PMScrollBar(); } @Override public Window createWindow() { return new MoltfWindow(); } } public interface ScrollBar { } public interface Window { } public class MoltfScrollBar implements ScrollBar { } public class MoltfWindow implements Window { } public class PMScrollBar implements ScrollBar{ } public class PMWindow implements Window{ } public Window getWindow(WidgetFactory widgetFactory) {return widgetFactory.createWindow();}public ScrollBar getScrollBar(WidgetFactory widgetFactory) {return widgetFactory.createScrollBar();}