当前位置: 首页 > 科技观察

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

时间:2023-03-22 11:58:53 科技观察

本文转载自微信公众号《大括号MC》,作者大括号MC。转载本文请联系花括号MC公众号。抽象工厂提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。简单来说就是为需要创建多个关联产品的场景提供解决方案。例如,很多软件都支持配置不同的颜色主题。切换主题时,所有按钮的样式和颜色会统一切换。假设我们的软件只有三种按钮,分别是Button、TextField和ComboBox,我们的软件只提供了两种主题,分别是红色主题和绿色主题。Let'stakealookatUML:让我们看看具体的代码是如何实现的。先创建一个SkinFactory接口publicinterfaceSkinFactory{ButtoncreateButton();TextFieldcreateTextField();ComboBoxcreateComboBox();}通过实现SkinFactory实现绿色主题工厂//红色主题工厂OverridepublicComboBoxcreateComboBox(){returnnewRedComboBox();}}红色主题工厂类类似,篇幅原因不再单独列出。看看客户端如何使用publicclassClient{publicstaticvoidmain(String[]args){//通过切换不同的工厂,可以达到改变所有按钮颜色的效果。SkinFactoryskinFactory=newRedSkinFactory();Buttonbutton=skinFactory.createButton();ComboBoxcomboBox=skinFactory.createComboBox();TextFieldtextField=skinFactory.createTextField();button.display();comboBox.display();textField.display();}}总结抽象工厂是一种创建模式,抽象工厂适用于创建一系列相关的按钮虽然抽象工厂在扩展一个主题的按钮时灵活方便,但也有一些缺点。最大的缺点是添加不属于任何主题的按钮很麻烦。比如上面的例子,如果要添加一个关闭按钮,这个按钮既不属于红色主题也不属于绿色主题,所以改起来比较复杂。工厂模型三兄弟:简单工厂适用于逻辑简单、产品数量较少的场景,工厂模型适用于创建独立的产品,抽象工厂适用于创建一系列相关的多个产品。