《Android源码设计模式解析与实战》读书笔记(五) 《Android源码设计模式解析与实战》PDF资料下载php
工厂方法模式,是建立型设计模式之一。数据库
定义一个用于建立对象的接口,让子类决定实例化哪一个类。设计模式
在任何须要生成复杂对象的地方,均可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就能够完成建立的对象无需使用工厂模式。bash
public abstract class AudiFactory {
public abstract <T extends AudiCar> T createAudiCar(Class<T> clz);
}
复制代码
public class AudiCarFactory extends AudiFactory {
@Override
public <T extends AudiCar> T createAudiCar(Class<T> clz) {
AudiCar car = null;
try {
car = (AudiCar) Class.forName(clz.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T)car;
}
}
复制代码
public abstract class AudiCar {
/**
* 汽车的抽象产品类
* <p>
* 定义汽车的一个行为方法,车能够启动开走
*/
public abstract void drive();
/**
* 定义汽车的一个行为方法,车能够自动巡航
*/
public abstract void selfNavigation();
}
复制代码
public class AudiQ3 extends AudiCar {
@Override
public void drive() {
System.out.println("Q3启动了!");
}
@Override
public void selfNavigation() {
System.out.println("Q3开始自动巡航!");
}
}
复制代码
public class AudiQ5 extends AudiCar {
@Override
public void drive() {
System.out.println("Q5启动了!");
}
@Override
public void selfNavigation() {
System.out.println("Q5开始自动巡航!");
}
}
复制代码
public class AudiQ7 extends AudiCar {
@Override
public void drive() {
System.out.println("Q7启动了!");
}
@Override
public void selfNavigation() {
System.out.println("Q7开始自动巡航!");
}
}
复制代码
//构造一个制造汽车的工厂对象
AudiFactory factory = new AudiCarFactory();
//生产Q3并启动
AudiQ3 audiQ3 = factory.createAudiCar(AudiQ3.class);
audiQ3.drive();
audiQ3.selfNavigation();
//生产Q5并启动
AudiQ5 audiQ5 = factory.createAudiCar(AudiQ5.class);
audiQ5.drive();
audiQ5.selfNavigation();
//生产Q7并启动
AudiQ7 audiQ7 = factory.createAudiCar(AudiQ7.class);
audiQ7.drive();
audiQ7.selfNavigation();
复制代码
输出结果:微信
以数据存储为例,代码以下所示:ide
public abstract class IOHandler {
/**
* 添加一条我的信息
* @param id
* @param name
*/
public abstract void add(String id, String name);
/**
* 删除一条我的信息
* @param id
*/
public abstract void remove(String id);
/**
* 更新一条我的信息
* @param id
* @param name
*/
public abstract void update(String id, String name);
/**
* 查询身份证对应的人名
* @param id
* @return
*/
public abstract String query(String id);
}
复制代码
对每一种持久化方式都定义一个具体的IO处理类,分别为普通文件存储、xml文件存储和SQLite数据库存储。ui
public class FileHandler extends IOHandler {
@Override
public void add(String id, String name) {
}
@Override
public void remove(String id) {
}
@Override
public void update(String id, String name) {
}
@Override
public String query(String id) {
return "AigeStudio";
}
}
复制代码
public class XMLHandler extends IOHandler {
@Override
public void add(String id, String name) {
}
@Override
public void remove(String id) {
}
@Override
public void update(String id, String name) {
}
@Override
public String query(String id) {
return "SMBrother";
}
}
复制代码
public class DBHandler extends IOHandler {
@Override
public void add(String id, String name) {
}
@Override
public void remove(String id) {
}
@Override
public void update(String id, String name) {
}
@Override
public String query(String id) {
return "Android";
}
}
复制代码
定义一个工厂类,以下:spa
public class IOFactory {
public static <T extends IOHandler> T getIOHandler(Class<T> clz) {
IOHandler handler = null;
try {
handler = (IOHandler) Class.forName(clz.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) handler;
}
}
复制代码