1.模式定义
定义一个创建对象的接口,让子类决定实例化哪个类,而对象的创建统一交给工厂去生成,有良好的封装性,
既做到了解耦也保证了最少知识原则。
任何设计模式都是用来解决某一特定场景问题的一种思想,当在开发中遇到某一问题的时候,
就想想能不能用某一种设计模式来解决!
2.简单工厂模式
3.工厂方法模式
一个工厂一般生成相对应的产品
存在问题:这个也存在问题,随着功能的增加,IOFactory和IOHandler会越来越多 会导致代码冗余,
但是功能有基本差不多
4.抽象工厂模式
定义跟 BitmapFactory 比较像 也和简单工厂比较像。通过特定的方法返回单一的对象
下面是一个 数据存储列子:
构建数据存储工厂类:用于创建 内存存储类,磁盘存储类,SP存储类
CacheFactory
package com.miaozi.baselibrary.cache;
/**
* created by panshimu
* on 2019/10/25
* 数据存储工厂类
*/
public class CacheFactory {
private static volatile CacheFactory mCacheFactory;
private CacheHandler mPreferencesCacheHolder,mMemoryCacheHolder,mDiskCacheHolder;
private CacheFactory(){
}
public static CacheFactory getInstance(){
if(mCacheFactory == null){
synchronized (CacheFactory.class){
if(mCacheFactory == null){
mCacheFactory = new CacheFactory();
}
}
}
return mCacheFactory;
}
public CacheHandler createCacheHandler(Class<? extends CacheHandler> cacheHandlerClass){
if(cacheHandlerClass != null){
try {
return cacheHandlerClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
public CacheHandler getPreferencesCacheHolder() {
if(mPreferencesCacheHolder == null){
mPreferencesCacheHolder = createCacheHandler(PreferenceCacheHandler.class);
}
return mPreferencesCacheHolder;
}
public CacheHandler getMemoryCacheHolder() {
if(mMemoryCacheHolder == null){
mMemoryCacheHolder = createCacheHandler(MemoryCacheHandler.class);
}
return mMemoryCacheHolder;
}
public CacheHandler getDiskCacheHolder() {
if(mDiskCacheHolder == null){
mDiskCacheHolder = createCacheHandler(DiskCacheHandler.class);
}
return mDiskCacheHolder;
}
/**
* 默认
* @return
*/
public CacheHandler getDefaultCacheHolder(){
return getPreferencesCacheHolder();
}
}
CacheHandler 定义数据存储的规范
package com.miaozi.baselibrary.cache;
/**
* created by panshimu
* on 2019/10/25
* 定义数据存储的规范
*/
public interface CacheHandler {
void put(String key, String value);
void put(String key, int value);
void put(String key, double value);
void put(String key, float value);
void put(String key, long value);
void put(String key, boolean value);
void put(String key, Object value);
String get(String key, String defaultValue);
int get(String key, int defaultValue);
double get(String key, double defaultValue);
float get(String key, float defaultValue);
long get(String key, long defaultValue);
boolean get(String key, boolean defaultValue);
Object get(String key, Object defaultValue);
}
PreferencesUtils SP工具类
package com.miaozi.baselibrary.cache;
import android.content.Context;
import android.content.SharedPreferences;
/**
* created by panshimu
* on 2019/10/25
*/
public class PreferencesUtils{
private static final String CACHE_TAG = "miaozi";
private static volatile PreferencesUtils mPreferencesUtils;
private SharedPreferences mPreferences;
private SharedPreferences.Editor mEditor;
private PreferencesUtils(){
}
public static PreferencesUtils getInstance(){
if(mPreferencesUtils == null){
synchronized (PreferencesUtils.class){
if(mPreferencesUtils == null){
mPreferencesUtils = new PreferencesUtils();
}
}
}
return mPreferencesUtils;
}
public void init(Context context){
mPreferences = context.getApplicationContext().getSharedPreferences(CACHE_TAG,Context.MODE_PRIVATE);
mEditor = mPreferences.edit();
}
public void put(String key, String value) {
if(mEditor == null)
throw new RuntimeException("请先初始化 init() ");
mEditor.putString(key,value);
mEditor.commit();
}
public void put(String key, int value) {
if(mEditor == null)
throw new RuntimeException("请先初始化 init() ");
mEditor.putInt(key,value);
mEditor.commit();
}
public void put(String key, float value) {
if(mEditor == null)
throw new RuntimeException("请先初始化 init() ");
mEditor.putFloat(key,value);
mEditor.commit();
}
public void put(String key, long value) {
if(mEditor == null)
throw new RuntimeException("请先初始化 init() ");
mEditor.putLong(key,value);
mEditor.commit();
}
public void put(String key, boolean value) {
if(mEditor == null)
throw new RuntimeException("请先初始化 init() ");
mEditor.putBoolean(key,value);
mEditor.commit();
}
public String get(String key, String defaultValue) {
if(mPreferences == null)
throw new RuntimeException("请先初始化 init() ");
return mPreferences.getString(key,defaultValue);
}
public int get(String key, int defaultValue) {
if(mPreferences == null)
throw new RuntimeException("请先初始化 init() ");
return mPreferences.getInt(key,defaultValue);
}
public float get(String key, float defaultValue) {
if(mPreferences == null)
throw new RuntimeException("请先初始化 init() ");
return mPreferences.getFloat(key,defaultValue);
}
public long get(String key, long defaultValue) {
if(mPreferences == null)
throw new RuntimeException("请先初始化 init() ");
return mPreferences.getLong(key,defaultValue);
}
public boolean get(String key, boolean defaultValue) {
if(mPreferences == null)
throw new RuntimeException("请先初始化 init() ");
return mPreferences.getBoolean(key,defaultValue);
}
}
PreferencesHolder SP辅助类
package com.miaozi.baselibrary.cache;
/**
* created by panshimu
* on 2019/10/25
*/
public abstract class PreferencesHolder implements CacheHandler {
@Override
public void put(String key, String value) {
PreferencesUtils.getInstance().put(key,value);
}
@Override
public void put(String key, int value) {
PreferencesUtils.getInstance().put(key,value);
}
@Override
public void put(String key, double value) {
}
@Override
public void put(String key, float value) {
PreferencesUtils.getInstance().put(key,value);
}
@Override
public void put(String key, long value) {
PreferencesUtils.getInstance().put(key,value);
}
@Override
public void put(String key, boolean value) {
PreferencesUtils.getInstance().put(key,value);
}
@Override
public void put(String key, Object value) {
}
@Override
public String get(String key, String defaultValue) {
return PreferencesUtils.getInstance().get(key,defaultValue);
}
@Override
public int get(String key, int defaultValue) {
return PreferencesUtils.getInstance().get(key,defaultValue);
}
@Override
public double get(String key, double defaultValue) {
return 0;
}
@Override
public float get(String key, float defaultValue) {
return PreferencesUtils.getInstance().get(key,defaultValue);
}
@Override
public long get(String key, long defaultValue) {
return 0;
}
@Override
public boolean get(String key, boolean defaultValue) {
return PreferencesUtils.getInstance().get(key,defaultValue);
}
@Override
public Object get(String key, Object defaultValue) {
return null;
}
}
PreferenceCacheHandler SP 工厂实现类
package com.miaozi.baselibrary.cache;
/**
* created by panshimu
* on 2019/10/25
* SP 存储
*/
public class PreferenceCacheHandler extends PreferencesHolder {
@Override
public void put(String key, String value) {
super.put(key, value);
}
@Override
public void put(String key, int value) {
super.put(key, value);
}
@Override
public boolean get(String key, boolean defaultValue) {
return super.get(key, defaultValue);
}
@Override
public void put(String key, float value) {
super.put(key, value);
}
@Override
public void put(String key, long value) {
super.put(key, value);
}
@Override
public void put(String key, boolean value) {
super.put(key, value);
}
@Override
public float get(String key, float defaultValue) {
return super.get(key, defaultValue);
}
@Override
public int get(String key, int defaultValue) {
return super.get(key, defaultValue);
}
@Override
public String get(String key, String defaultValue) {
return super.get(key, defaultValue);
}
@Override
public long get(String key, long defaultValue) {
return super.get(key, defaultValue);
}
}
MemoryCacheHandler 内存工厂实现类
package com.miaozi.baselibrary.cache;
/**
* created by panshimu
* on 2019/10/25
* 内存存储
*/
public class MemoryCacheHandler implements CacheHandler {
@Override
public void put(String key, String value) {
}
@Override
public void put(String key, int value) {
}
@Override
public void put(String key, double value) {
}
@Override
public void put(String key, float value) {
}
@Override
public void put(String key, long value) {
}
@Override
public void put(String key, boolean value) {
}
@Override
public void put(String key, Object value) {
}
@Override
public String get(String key, String defaultValue) {
return null;
}
@Override
public int get(String key, int defaultValue) {
return 0;
}
@Override
public double get(String key, double defaultValue) {
return 0;
}
@Override
public float get(String key, float defaultValue) {
return 0;
}
@Override
public long get(String key, long defaultValue) {
return 0;
}
@Override
public boolean get(String key, boolean defaultValue) {
return false;
}
@Override
public Object get(String key, Object defaultValue) {
return null;
}
}
DiskCacheHandler 磁盘存储工厂实现类
package com.miaozi.baselibrary.cache;
/**
* created by panshimu
* on 2019/10/25
* 磁盘存储
*/
public class DiskCacheHandler implements CacheHandler {
@Override
public void put(String key, String value) {
}
@Override
public void put(String key, int value) {
}
@Override
public void put(String key, double value) {
}
@Override
public void put(String key, float value) {
}
@Override
public void put(String key, long value) {
}
@Override
public void put(String key, boolean value) {
}
@Override
public void put(String key, Object value) {
}
@Override
public String get(String key, String defaultValue) {
return null;
}
@Override
public int get(String key, int defaultValue) {
return 0;
}
@Override
public double get(String key, double defaultValue) {
return 0;
}
@Override
public float get(String key, float defaultValue) {
return 0;
}
@Override
public long get(String key, long defaultValue) {
return 0;
}
@Override
public boolean get(String key, boolean defaultValue) {
return false;
}
@Override
public Object get(String key, Object defaultValue) {
return null;
}
}
不管你想添加什么存储模式 只需要在工厂里面创建就行。
好了。
网友评论