1. 抽象工厂模式(AbstractFactory)介绍
UML类图
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。
2. 示例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''AbstractFactory Pattern with Python Code
'''
from abc import abstractmethod, ABCMeta
class IProduct1(metaclass=ABCMeta):
@abstractmethod
def show(self):
pass
class IProduct2(metaclass=ABCMeta):
@abstractmethod
def show(self):
pass
class Product1(IProduct1):
def show(self):
print("This is 1 mode product")
class Product2(IProduct2):
def show(self):
print("This is 2 mode product")
class IFactory(metaclass=ABCMeta):
@abstractmethod
def createProduct1():
pass
@abstractmethod
def createProduct2():
pass
class Factory(IFactory):
def createProduct1(self):
return Product1()
def createProduct2(self):
return Product2()
class Client(object):
def main(self):
factory = Factory()
factory.createProduct1().show()
factory.createProduct2().show()
if __name__ == "__main__":
Client().main()
输出:
# ./AbstractFactory.py
This is 1 mode product
This is 2 mode product
参考:
https://wiki.jikexueyuan.com/project/java-design-pattern/abstract-factory-pattern.html