Android 设计模式:(六)抽象工厂模式

前言
本文是对《Adroid 源码设计模式解析与实战》 何红辉、关爱民 著 人民邮电出版社所做的读书笔记。文章是对本书的一些列学习笔记,如若有侵犯到作者权益,还望作者能联系我,我会及时下架。
这本书不错,有兴趣的同学可以买原书看看。
感兴趣的朋友欢迎加入学习小组QQ群: 193765960

版权归作者所有,如有转发,请注明文章出处:https://xiaodanchen.github.io/archives/

相关文章:

Android 设计模式:(一)面向对象的六大原则
Android 设计模式:(二)单例模式
Android 设计模式:(三)Builder模式
Android 设计模式:(四)原型模式
Android 设计模式:(五)工厂方法模式
Android 设计模式:(六)抽象工厂模式
Android 设计模式:(七)策略模式

1. 抽象工厂模式的定义

为创建一组相关或者相互依赖的对象提供一个接口。(生产某款产品的零部件)

2. 抽象工厂模式的实现

上一篇讲到,小明开了个Audi车组装工厂。随着小明生意越做越大,安奈不住骚动的心的小明,开始向产品上游伸手,丫的要自己生产汽车零配件!
但是谈何容易, Audi的Q3,Q5,Q7使用的零件各不相同,这可愁坏了小明。没办法,只能再找找小民帮忙拿主意了。最终小民给出了终极解决方案:抽象工厂模式。
按照小民的设计,小明开办了3个零件工厂:Q3零部件工厂、Q5零部件工厂、Q7零部件工厂。

源码

假设小明的零件工厂要生产三类产品:轮胎、发动机、制动系统。

/**
* 抽象零件:轮胎
*/
public interface ITire{
  public void tire();
}
 
/**
* 抽象零件:发动机
*/
public interface IEngine{
  public void engine();
}
 
/**
* 抽象零件:刹车系统
*/
public interface IBrake{
  public void brake();
}
 
/**
* 抽象零件工厂
*/
public abstract class AbstractFactory{
  //生产轮胎
  public abstract ITire createTire();
  //生产发动机
  public abstract IEngine createEngine();
  //生产制动系统
  public abstract IBrake createBrake();
}

以Q3汽车零件生产厂为例

//Q3车胎生产
public class Q3Tire implements ITire{
  public void tire(){...};
}

//Q3发动机生产
public class Q3Engine implements  IEngine{
  public void engine(){...};
}
 
 //Q3刹车系统生产
public class Q3Brake implements  IBrake{
  public void brake(){...};
}
 
/**
* Q3零件工厂
*/
public class Q3Factory extends AbstractFactory{
  //生产轮胎
  public ITire createTire(){
    return new Q3Tire();
  };
  //生产发动机
  public IEngine createEngine(){
    return new Q3Engine();
  };
  //生产制动系统
  public IBrake createBrake(){
    return new Q3Brake();
  };
}

零件工厂建好了,开足马力投产吧

public class Client{
  public static void main(String[] args){
    //构建Q3工厂
    AbstractFactory factory = new Q3Factory();
    //生产Q3的零件
    factory.createTire().tire();
    factory.createEngine().engine();
    factory.createBrake().brake();
  }
}

解析

每增加一个产品工厂,就要创建一堆的产品零件类,如果工厂类过多,那么就会导致类文件非常多。所以在实际开发中,抽象工厂模式的运用要权衡

3. 总结

优点:
接口与实现分离,客户端使用抽象工厂来生产产品,生产过程完全面向接口,不需要知道具体实现。
缺点:
工厂类增加很多,类文件会增加很多。不太容易扩展新的产品类。

你可能感兴趣的:(Android 设计模式:(六)抽象工厂模式)