您现在的位置是:首页 > 文章详情

Android重拾设计模式系列——抽象工厂模式

日期:2016-11-20点击:588

个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 !
同时,搜索微信公众号CoorChice,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。

img_185e128b60f5265f35c150a5e53f5e2f.png
封面-设计模式.png

抽象工厂模式和工厂方法模式很相似,都是延迟子类选择创建,但它们的不同点在于:

工厂方法模式专注于创建单个完整的产品,而抽象工厂模式专注于创建构一个完整产品的所有部件。比如说,工厂方法模式创建一把单手剑,而抽象工厂模式需要创建剑柄、剑体、需要用的材料等。它们思想相同,但关注点不一样。工厂方法模式可以理解为宏观,而抽象工厂模式可以理解为微观。
[工厂方法模式传送门]

定义及实质

  • 定义

提供创建一系列相关或相互依赖的对象的接口,而无需指定它们的具体类。

  • 实质

选择产品簇的实现。

模式图解

抽象工厂模式UML图

img_e3f276de4a3528f443997f04a67bab26.png
抽象工厂模式UML图

从上图可以看出:

  1. 首先定义了一个抽象工厂类AbstractFactory,它相当于一个模版,它能够生产具有相关关系的产品A、B,其子类工厂按照这个规范进行扩展;
  2. 定义两种产品接口(产品模版),AbstarctProductAAbstarctProductB,它们是相关的产品类型,比如说剑柄和剑体;
  3. 继承抽象工厂类AbstractFactory,定义两种不同的工厂,分别用于生产1系列产品和2系列产品。
    下面是工厂类:
//抽象工厂类AbstractFactory public abstract class AbstractFactory{ public abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB(); } //1系列产品工厂 public class ConcreteFactory1{ @Overrid public AbstractProductA createProductA(){ return new ProductA1(); } @Overrid public AbstractProductB createProductB(){ return new ProductB1(); } } //2系列产品工厂 public class ConcreteFactory1{ @Overrid public AbstractProductA createProductA(){ return new ProductA2(); } @Overrid public AbstractProductB createProductB(){ return new ProductB2(); } } 

下面是产品类:

//A类产品接口(模版) public interface AbstractProductA{ void doSomthing(); } //A1产品 public class ProductA1 implement AbstractProductA{ @Overrid public void doSomething(){ System.out.println("ProductA1"); } } //A2产品 public class ProductA2 implement AbstractProductA{ @Overrid public void doSomething(){ System.out.println("ProductA2"); } } //B类产品接口(模版) public interface AbstractProductB{ void doSomthing(); } //B1产品 public class ProductB1 implement AbstractProductB{ @Overrid public void doSomething(){ System.out.println("ProductB1"); } } //B2产品 public class ProductB2 implement AbstractProductB{ @Overrid public void doSomething(){ System.out.println("ProductB2"); } } 

下面看看Client客户端如何使用:

public class Client{ public static void main(String[] args){ //现在需要创建1系列产品 AbstractFactory factory = new ConcreteFactory1(); ProductA a1 = factory.createProductA(); ProductB b1 = factory.createProductB(); //接下来创建2系列产品 factory = new ConcreteFactory2(); ProductA a2 = factory.createProductA(); ProductB b2 = factory.createProductB(); } } 

抽象工厂模式顺序图

img_9570206cc64ddb0b45432df362705d01.png
抽象工厂模式顺序图

结合上面代码来看顺序图。

模式优缺点

优势

  1. 封装复杂创建逻辑;
  2. 解耦Client和产品;
  3. 方便切换产品簇,只需更换工厂实例就行。

缺点

  1. 不容易扩展新产品,当需要增加新的产品类型时,不得不把之前的每个工厂类都修改;
  2. 容易造成选择层次的复杂,因为当产品类型多时,配置方案也将增加。
img_08b056b059ac831a2d371fa29bdef1e3.jpe
CoorChice的公众号
原文链接:https://yq.aliyun.com/articles/656873
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章