工厂设计模式之数据存储
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); }
相关文章推荐
- 工厂设计模式 - 数据存储的特有方式
- 动态产生的持久模型和数据存储的设计模式
- 文档型数据库设计模式-如何存储树形数据
- 设计模式知识连载(39)---数据访问对象模式---本地存储DAO
- 设计模式之简单数据工厂
- 对数据库数据操作,工厂方法设计模式(Factory Method)
- 缓存多种不同类型的数据(工厂设计模式)
- Android教程 -04 启动其它Activity,静态工厂设计模式传递数据
- 文档型数据库设计模式-如何存储树形数据
- Android教程 -04 启动其它Activity,静态工厂设计模式传递数据
- 文档型数据库设计模式-如何存储树形数据
- [ mongoDB ] - 文档型数据库设计模式-如何存储树形数据 [转]
- 设计模式实践-反射到所有接口实现类实践工厂方法,页面中有大量计算数据时设计实践
- [ mongoDB ] - 文档型数据库设计模式-如何存储树形数据
- 从数据访问程序看设计模式之工厂模式、抽象工厂模式
- 设计模式之工厂模式
- 设计模式-工厂模式
- Hive的数据存储模式
- java设计模式之工厂模式
- 设计模式-工厂方法和抽象工厂方法