我写过简单工厂模式(SimpleFactoryPattern)和工厂方法模式(FactoryMethodPattern)的对比的博客。现在学到抽象工厂模式(AbstractFactoryMethod)更是让人大开眼界。
先上抽象工厂模式(AbstractFactoryPattern)的UML类图
我认为抽象工厂模式(AbstractFactoryPattern)和工厂方法模式(FactoryMethodPattern)的唯一区别就是FactoryA和FactoryB可以创建多个抽象产品。
下面列出来具体区别:
简单工厂模式:
- 一个抽象产品类,可以派生出多个抽象产品类;
- 一个抽象工厂类,可以派生出多个具体工厂类;
- 每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
- 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;
- 一个抽象工厂类,可以派生出多个具体工厂类;
- 每个具体工厂类可以创建多个具体产品类的实例。
区别:
- 工厂方法模式(FactoryMethodPattern)只有一个抽象产品类,而抽象工厂模式(AbstractFactoryPattern)有多个;
- 工厂方法模式(FactoryMethodPattern)的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式(AbstractFactoryPattern)可以创建多个。
抽象工厂模式(AbstractFactoryPattern)的缺点:
当用户需求来自增加功能,需要改好几处才能实现,修改代码较多。
当然如果想要改进抽象工厂模式(AbstractFactoryPattern)也是可以的。
可以利用C#特有的反射技术、或反射+配置文件都可以实现。