设计模式系列-抽象工厂模式

开发 前端
抽象工厂提供了一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。简单来说是为需要创建多个相关联产品的场景提供了解决思路。

 [[426616]]

本文转载自微信公众号「花括号MC」,作者花括号MC。转载本文请联系花括号MC公众号。

抽象工厂提供了一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。简单来说是为需要创建多个相关联产品的场景提供了解决思路。

举个例子

很多软件都支持配置不同的颜色的主题,当切换主题时,所有按钮样式和颜色都会统一切换。

假设我们的软件只有三类按钮,分别是Button, TextField,以及ComboBox,并且我们的软件只提供两类主题,即红色主题和绿色主题。

来看一下UML :

再来看一下具体代码如何实现。

先来创建一个SkinFactory接口

  1. public interface SkinFactory { 
  2.     Button createButton(); 
  3.     TextField createTextField(); 
  4.     ComboBox createComboBox(); 

通过实现SkinFactory实现绿色主题工厂

  1. //红色主题工厂 
  2. public class RedSkinFactory implements SkinFactory { 
  3.  
  4.     @Override 
  5.     public Button createButton() { 
  6.         return new RedButton(); 
  7.     } 
  8.  
  9.     @Override 
  10.     public TextField createTextField() { 
  11.         return new RedTextField(); 
  12.     } 
  13.  
  14.     @Override 
  15.     public ComboBox createComboBox() { 
  16.         return new RedComboBox(); 
  17.     } 

红色主题工厂类类似,因为篇幅原因不在单独列出。

来看一下客户端如何使用

  1. public class Client { 
  2.     public static void main(String[] args){ 
  3.         //通过切换不同工厂,可以达到所有按钮颜色都变换的效果 
  4.         SkinFactory skinFactory = new RedSkinFactory(); 
  5.         Button button = skinFactory.createButton(); 
  6.         ComboBox comboBox = skinFactory.createComboBox(); 
  7.         TextField textField = skinFactory.createTextField(); 
  8.  
  9.         button.display(); 
  10.         comboBox.display(); 
  11.         textField.display(); 
  12.     } 

总结

抽象工厂是创建模式之一,抽象工厂适合创建一系列有相关性的多个产品,虽然抽象工厂在扩展一个主题的按钮时灵活方便,但是也有一定缺点, 最大缺点就是想单独增加一个不属于任何主题的按钮时比较麻烦,比如上面的例子中,如果想增加一个关闭按钮,这个按钮即不属于红色主题也不属于绿主题,那么改动起来就比较复杂。

工厂模式三兄弟:简单工厂适合逻辑简单,创建产品数量很少的场景,工厂模式适合创建独立的产品,抽象工厂适合创建一系列有相关性的多个产品。

 

责任编辑:武晓燕 来源: 花括号MC
相关推荐

2020-10-19 09:28:00

抽象工厂模式

2021-03-06 22:50:58

设计模式抽象

2022-01-12 13:33:25

工厂模式设计

2009-01-15 10:55:29

JavaScript设计模式抽象工厂

2011-07-28 09:50:58

设计模式

2020-12-17 09:38:16

设计模式参数

2013-11-26 16:29:22

Android设计模式

2024-03-06 13:19:19

工厂模式Python函数

2020-08-21 07:23:50

工厂模式设计

2011-11-17 16:03:05

Java工厂模式Clojure

2020-09-14 17:26:48

抽象工厂模式

2023-08-07 06:30:15

抽象工厂模式软件设计模式

2021-07-06 08:59:18

抽象工厂模式

2010-04-19 09:30:00

工厂模式PHP设计模式

2020-10-23 09:40:26

设计模式

2020-11-03 13:05:18

命令模式

2020-11-04 08:54:54

状态模式

2010-10-09 09:25:35

Python工厂模式

2021-03-02 08:50:31

设计单例模式

2022-01-14 09:22:22

设计模式桥接
点赞
收藏

51CTO技术栈公众号