Android 简单工厂模式
定义
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
类型
创建型模式
介绍
工厂模式比较简单,我直接拿实际的一个例子说明
当前Android有三种key_value序列化方式,分别是SharedPreferences 、
MMKV、DataStore 。这三个库,各个项目都有分别使用,为了方便迁移。
我们可以使用一个Data接口,去规定里面的方法。如果后续有新的库,也
可以通过这个接口实现好,简单替换。
示例
定义一个接口,提供能力(只有了add方法做演示)
public interface Data {
void add();
}
封装SharedPreferences 时使用Data接口规范能力
public class SharedPreferences implements Data {
private final String TAG = this.getClass().getSimpleName();
@Override
public void add() {
Log.d(TAG, "使用SharedPreferences 进行add");
}
}
封装MMKV 时使用Data接口规范能力
public class MMKV implements Data{
private final String TAG = this.getClass().getSimpleName();
@Override
public void add() {
Log.d(TAG, "使用MMKV 进行add");
}
}
封装DataStore 时使用Data接口规范能力
public class DataStore implements Data {
private final String TAG = this.getClass().getSimpleName();
@Override
public void add() {
Log.d(TAG, "使用DataStore 进行add");
}
}
简单静态工厂模式
通过使用DataFactory 类传入不同的类型,返回不同的Data库
public class DataFactory {
public static final String SP = "SharedPreferences";
public static final String MMKV = "MMKV";
public static final String DATA_STORE = "DATA_STORE";
/**
* 创建一个IData类,默认是SharedPreferences
*
* @param type 类型
* @return IData
*/
public static IData create(String type) {
IData iData = null;
switch (type) {
case MMKV:
iData = new MMKVUtils();
break;
case DATA_STORE:
iData = new DataStoreUtils();
break;
default:
iData = new SharedPreferencesUtils();
break;
}
return iData;
}
}
这只是一个简单的例子,正常创建一个对象应该是更加复杂的。比如:创建一个类需要传入特定的参数,特定的参数中可能有一些复杂的类,还需要使用者去深入了解。还有一些类不能直接使用new出来的对象等等问题。
当然还有一种多方法工厂模式可能使用更加简单
public class DataFactory {
public static final String SP = "SharedPreferences";
public static final String MMKV = "MMKV";
public static final String DATA_STORE = "DATA_STORE";
public static IData getSharedPreferences() {
return new SharedPreferencesUtils();
}
public static IData getMMKV() {
return new MMKVUtils();
}
public static IData getDataStore() {
return new SharedPreferencesUtils();
}
}
这种写法属于直接调用方法,甚至不需要查看工厂类有哪些成员变量。
两种都是属于简单工厂模式,选择一个方便理解的使用即可。其实在类型少的时候看起来区别不大,当类型多了,就看是使用if简单还是方法简单。
总结
工厂模式还是比较简单看懂的。通过上面示例,我们不管使用MMKV还是SharedPreferences ,add方法的参数和功能是一样的
具体怎么实现由各个类来完成。特别适合框架迁移。而且我们也不需要关心着三个Data框架是怎么创建出来的。
我们创建Data库对象时无需关注是怎么创建的,直接传入类型获取data对象
通过Data接口统一了,各个仓库提供的能力。
此模式不属于23种设计者模式,但是它是所有工厂模式的基础
更多推荐

所有评论(0)