本文是阅读《Android 源码设计模式解析与实战》后的笔记
定义
定义一个用于创建对象的接口,让子类决定实例化类别。
使用场景
某些需要生成复杂对象的时候,具体场景还是需要开发者进行权衡。
简单示例:
public abstract class Computer {
public abstract void complete();
}
public class MacBookComputer extends Computer{
@Override
public void complete() {
System.out.println("组装MacBook");
}
}
public abstract class Factory {
public abstract Computer buildComputer();
}
public class MacBookFactory extends Factory{
@Override
public Computer buildComputer() {
return new MacBookComputer();
}
}
public class Client {
public static void main(String[] args) {
Factory factory = new MacBookFactory();
Computer computer = factory.buildComputer();
computer.complete();
}
}
利用反射实现的工厂:
public abstract class Factory {
public abstract <T extends Computer> Computer buildComputer(Class<T> clazz);
}
public class MacBookFactory extends Factory{
@Override
public <T extends Computer> Computer buildComputer(Class<T> clazz) {
try {
return clazz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
public class Client {
public static void main(String[] args) {
Factory factory = new MacBookFactory();
Computer computer = factory.buildComputer(MacBookComputer.class);
computer.complete();
}
}
书中提示Android开发中的文件存储可以用工厂模式去实现,这就留给我们读者了。
优点
书中只是用代码具体说明优点,个人理解是规避实现细节,类型切换方便,个人愚见。
缺点
新增产品需要创建新的产品类,导致类结构复杂化