前言
本文是对《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. 总结
优点:
接口与实现分离,客户端使用抽象工厂来生产产品,生产过程完全面向接口,不需要知道具体实现。
缺点:
工厂类增加很多,类文件会增加很多。不太容易扩展新的产品类。