简介:
工厂方法模式是一种创建型设计模式,在任何需要生成复杂对象的地方,都可以使用工厂模式。复杂对象适合使用工厂模式,用
new可以完成创建的对象无需使用工厂模式。
工厂模式的使用方法也很简单,我们可以以Android存储的方式来为例,众所周知,Android中去持久化数据有很多方式,可以
使用SharePreference或者Sqlite等,但这些操作无非就是增删改查,这种情况下我们就可以利用工厂方法模式来解决。
具体的处理类:
客户端使用类:
产品类,同时还要引入抽象层,这必然会导致类结构的复杂化,所以选择一种设计模式,必须要考虑在这种情况下是否适合。
参考书籍:
《Android源码设计模式解析与实战》
工厂方法模式是一种创建型设计模式,在任何需要生成复杂对象的地方,都可以使用工厂模式。复杂对象适合使用工厂模式,用
new可以完成创建的对象无需使用工厂模式。
工厂模式的使用方法也很简单,我们可以以Android存储的方式来为例,众所周知,Android中去持久化数据有很多方式,可以
使用SharePreference或者Sqlite等,但这些操作无非就是增删改查,这种情况下我们就可以利用工厂方法模式来解决。
首先在抽象类中去定义操作的方法:
IOHandler.java:
public abstract class IOHandler {
public abstract void add(String id, String name);
public abstract void delete(String id);
public abstract void update(String id, String name);
public abstract void query(String id, String name);
}
具体的处理类:
public class FileHandler extends IOHandler { //文件处理类
@Override
public void add(String id, String name) {
// 业务处理
}
@Override
public void delete(String id) {
// 业务处理
}
@Override
public void update(String id, String name) {
// 业务处理
}
@Override
public void query(String id, String name) {
// 业务处理
}
}
public class XMLHandler extends IOHandler { //XMl处理类
@Override
public void add(String id, String name) {
// 业务处理
}
@Override
public void delete(String id) {
// 业务处理
}
@Override
public void update(String id, String name) {
// 业务处理
}
@Override
public void query(String id, String name) {
// 业务处理
}
}
工厂类:
public class Factory {
//获取IO处理者
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;
}
}
客户端使用类:
public static void main(String[] args) {
int DefaultState = 1;
int FILEOPERATE = 1;// 文件方式获取
int XMLOPERATE = 2;// XML方式获取
if (DefaultState == FILEOPERATE) {
// 文件方式获取
IOHandler handler = Factory.getIOHandler(FileHandler.class);//不同的方式从工厂中去获取
handler.add(id, name);
handler.delete(id);
handler.update(id, name);
handler.query(id, name);
} else {
// XML文件方式获取
IOHandler handler = Factory.getIOHandler(XMLHandler.class);//不同的方式从工厂中去获取
handler.add(id, name);
handler.delete(id);
handler.update(id, name);
handler.query(id, name);
}
}
当然上面只是最简单的工厂方法模式,同样存在着优缺点,缺点就是每次为工厂方法模式添加新的产品时就要编写一个新的产品类,同时还要引入抽象层,这必然会导致类结构的复杂化,所以选择一种设计模式,必须要考虑在这种情况下是否适合。
参考书籍:
《Android源码设计模式解析与实战》