您的位置:首页 > 其它

工厂设计模式之数据存储

2018-03-21 13:53 288 查看

第一个版本简单使用

onCreate方法

mTextView = (TextView) findViewById(R.id.test_tv);
// 用户的登录信息或者其他信息保存 sp 数据库 等等
SharedPreferences preferences = getSharedPreferences("cache", MODE_PRIVATE);
preferences.edit().putString("username","peakmain").putString("password","19931005").commit();

// SharedPreferences 的数据其实是存到哪里去了? 其实也是操作的文件,但是文件是 xml
SharedPreferences.Editor editor = preferences.edit();
editor.putString("username", "peakmain");
editor.putString("password", "19931005");
editor.commit();


按钮点击事件

public void click(View view) {
SharedPreferences preferences = getSharedPreferences("cache", MODE_PRIVATE);
String username=preferences.getString("username","");
String password=preferences.getString("password","");
mTextView.setText("username="+username+",password="+password);
}
}


第二个版本:提取工具类

public class PreferencesUtils {
private volatile static PreferencesUtils mInstance;
private SharedPreferences mPreferences;
private SharedPreferences.Editor mEditor;

private PreferencesUtils() {

}

public void init(Context context) {
mPreferences = context.getApplicationContext().getSharedPreferences("cache", Context.MODE_PRIVATE);
mEditor = mPreferences.edit();
}

public static PreferencesUtils getInstance() {
if (mInstance == null) {
synchronized (PreferencesUtils.class) {
if (mInstance == null) {
mInstance = new PreferencesUtils();
}
}
}
return mInstance;
}

public PreferencesUtils saveString(String key, String value) {
mEditor.putString(key, value);
return this;
}

public void commit() {
mEditor.commit();
}

public String getString(String key) {

return mPreferences.getString(key, "");
}
}


使用

onCreate中

PreferencesUtils.getInstance().saveString("username", "peakmain")
.saveString("password", "19931005")
.commit();


按钮点击事件

public void click(View view) {
String username = PreferencesUtils.getInstance().getString("username");
String password = PreferencesUtils.getInstance().getString("password");
mTextView.setText("username=" + username + ",password=" + password);
}


第三个版本,简单工厂模式,实现可以切换



IOHandler

/*************save data start***************/
void save(String key,String value);
void save(String key,double value);
void save(String key,int value);
void save(String key,long value);
void save(String key,boolean value);
void save(String key,Object value);
/*************sava data end***************/

/*************get data start***************/
String getString(String key);
double getDouble(String key,double defaultValue);
int getInt(String key,int defaultValue);
long getLong(String key,long defaultValue);
boolean getBoolean(String key,boolean defaultValue);
Object getObject(String key);
/*************get data end***************/
}


MemoryIOHandler继承于IOHandler

代码较长,只贴其中一些

ublic class MemoryIOHandler implements IOHandler {
private static LruCache<String,Object> mLruCache=new LruCache<>(8*1024*1024);
@Override
public void save(String key, String value) {
mLruCache.put(key,value);
}
@Override
public String getString(String key) {
return (String) mLruCache.get(key);
}
}


PreferencesIOHandler继承于IOHandler

public class PreferencesIOHandler implements IOHandler {
@Override
public void save(String key, String value) {
PreferencesUtils.getInstance().saveString(key,value);
}

@Override
public String getString(String key) {
return PreferencesUtils.getInstance().getString(key);
}

}


IOHandlerFactory

public class IOHandlerFactory {
public enum IOType{
MEMORY,PREFERENCES;
}
public static IOHandler createIOHandler(IOType type){
switch (type){
case MEMORY:
return new MemoryIOHandler();

case PREFERENCES:
return new PreferencesIOHandler();
default:
return null;
}
}
}


第四个版本:工厂设计模式



IOHandler、MemoryIOHandler和PreferencesIOHandler三者都不变

IOFactory

public interface IOFactory {

public IOHandler createIOHandler();

}


MemoryIOFactory

public class MemoryIOFactory implements IOFactory {
@Override
public IOHandler createIOHandler() {
return new MemoryIOHandler();
}
}


PreferencesIOFactory

public class PreferencesIOFactory implements IOFactory {
@Override
public IOHandler createIOHandler() {
return new PreferencesIOHandler();
}
}


使用

onCreate()

IOHandler handler = new MemoryIOFactory().createIOHandler();
handler.save("username","peakmain");
handler.save("password","908");


按钮点击事件

public void click(View view) {
IOHandler handler = new MemoryIOFactory().createIOHandler();
String username =handler.getString("username");
String password = handler.getString("password");
mTextView.setText("username=" + username + ",password=" + password);
}


第五个版本抽象工厂模式,解决工厂设计方法模式导致过多类的问题



IOFactory

public interface IOFactory {

public IOHandler createIOHandler(Class<? extends IOHandler> clazz);
}


IOHandlerFactory

public class IOHandlerFactory implements IOFactory {
private IOHandlerFactory() {

}

private static IOHandlerFactory mInstance;
private IOHandler mMemoryIOHandler, mPreferencesIOHandler;

public static IOHandlerFactory getInstance() {
if (mInstance == null) {
synchronized (IOHandlerFactory.class) {
if (mInstance == null) {
mInstance = new IOHandlerFactory();
}
}
}
return mInstance;
}

@Override
public IOHandler createIOHandler(Class<? extends IOHandler> clazz) {
try {
return clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return new PreferencesIOHandler();//默认的
}

/**
* 获取 运行内存 存储
*/
public IOHandler getMemoryIOHandler() {
if (mMemoryIOHandler == null) {
mMemoryIOHandler = createIOHandler(MemoryIOHandler.class);
}
return mMemoryIOHandler;

}

/**
* 获取 SP 存储
*/
public IOHandler getPreferencesIOHandler() {
if (mPreferencesIOHandler == null) {
mPreferencesIOHandler = createIOHandler(PreferencesIOHandler.class);
}
return mPreferencesIOHandler;
}

/**
* 获取 默认 存储
* 方便切换
*/
public IOHandler getDefaultIOHandler() {
return getPreferencesIOHandler();
}
}


使用

IOHandler handler = IOHandlerFactory.getInstance().getMemoryIOHandler();
handler.save("username","peakmain");
handler.save("password","908");


public void click(View view) {
IOHandler handler = IOHandlerFactory.getInstance().getMemoryIOHandler();
String username =handler.getString("username");
String password = handler.getString("password");
mTextView.setText("username=" + username + ",password=" + password);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: