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

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

丰顺网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

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

举个例子

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

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

来看一下UML :

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

先来创建一个SkinFactory接口

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

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

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

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

来看一下客户端如何使用

 
 
 
 
  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.         button.display();
  9.         comboBox.display();
  10.         textField.display();
  11.     }
  12. }

总结

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

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

文章名称:设计模式系列-抽象工厂模式
转载来源:http://www.shufengxianlan.com/qtweb/news16/516466.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联