设计模式学习 - Abstract Factory Pattern

前几天总结了工厂方法模式:将创建对象的部分抽象,留作具体的子类来创建。当时也说过,工厂方法是抽象工厂的一个特例。那么抽象工厂解决什么问题呢?抽象工厂主要用于存在一组产品或者产品族的场景中。所谓产品族,就是一组有关联的产品。对产品和工厂都进行抽象,客户端只知道抽象的工厂和产品,而不需要关心具体的工厂和产品,具体选择哪个工厂,由上下文来来决定。贴一下抽象工厂通用类图。

考虑这个场景,在一个主题系统中,存在 windows主题和mac 主题,主题中包含许多元素,比如按钮、复选框,单选框,标题栏等,每一个主题中的这些元素可以作为一个产品族,当你选择不同的主题时,就需要不同的元素。这个案例中就特别适合采用抽象工厂帮助我们管理这些元素。下面是一个解决方案的类图。