盒子
盒子
文章目录
  1. 1. 抽象工厂模式的定义
  2. 2. 抽象工厂模式的实现
    1. 源码
    2. 解析
  3. 3. 总结

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

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

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

1. 抽象工厂模式的定义

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

2. 抽象工厂模式的实现

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

源码

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 抽象零件:轮胎
*/
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汽车零件生产厂为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//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();
};
}

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

1
2
3
4
5
6
7
8
9
10
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. 总结

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

扫描加群
好好学习,天天向上!