这里以我的一个开源项目KLog来说吧,在最开始写这个类的时候,就只有KLog这一个类,完成基本的Log打印功能,后来又添加了JSON解析、XML解析、Log信息存储等功能,这个时候一个类就不太合适了,于是我把JSON、XML、FILE操作相关的代码抽取到单独的类中,比如JSON打印的代码
public class JsonLog { (String tag, String msg, String headString) { String message; try { if (msg.startsWith("{")) { JSONObject jsonObject = new JSONObject(msg); message = jsonObject.toString(KLog.JSON_INDENT); } else if (msg.startsWith("[")) { JSONArray jsonArray = new JSONArray(msg); message = jsonArray.toString(KLog.JSON_INDENT); } else { message = msg; } } catch (JSONException e) { message = msg; } Util.printLine(tag, true); message = headString + KLog.LINE_SEPARATOR + message; String[] lines = message.split(KLog.LINE_SEPARATOR); for (String line : lines) { Log.d(tag, "║ " + line); } Util.printLine(tag, false); } }代码很简单,就一个方法,但是在使用的时候,无论打印哪种格式,都是这样使用的
//普通打印 KLog.d(LOG_MSG); //JSON格式打印 KLog.json(JSON); //XML格式打印 KLog.xml(XML);可以看到,虽然功能不同,但是都通过KLog这个类进行了封装,用户只知道用KLog这个类能完成所有需求即可,完全不需要知道代码实现是几个类完成的。
实际上,在KLog内部,是多个类共同完成打印功能的。
private static void printLog(int type, String tagStr, Object... objects) { if (!IS_SHOW_LOG) { return; } String[] contents = wrapperContent(tagStr, objects); String tag = contents[0]; String msg = contents[1]; String headString = contents[2]; switch (type) { case V: case D: case I: case W: case E: case A: BaseLog.printDefault(type, tag, headString + msg); break; case JSON: JsonLog.printJson(tag, msg, headString); break; case XML: XmlLog.printXml(tag, msg, headString); break; } }但是通过外观模式,这些细节对用户隐藏了,这样如果以后我想更换JSON的解析方式,用户的代码不需要任何改动,这也是这个设计模式的优势所在。
总结唠唠叨叨的,总算是把这几种设计模式介绍完了,看完这篇文章,你应该就会发现其实Android中的设计模式确实到处都存在,不是缺少设计模式,而是缺少一双发现的眼睛。
当然,设计模式的提出是为了解决特定的问题,当我们遇到类似问题的时候,可以从设计模式的角度思考和解决问题,这应该是我最大的收获吧。
关于我江湖人称『凯子哥』,Android开发者,喜欢技术分享,热爱开源。
顶 5 踩 0
我的同类文章
猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
博客之星
博主正在参加2015年博客之星的选举,如果我的文章对你有帮助的话,可以投我一票,支持一下,谢谢!
投票地址个人资料
bz419927089
积分:7921
个人说明
不是大牛,不单独回答问题
我的GITHUB,欢迎follow
Android重难点解析,不点后悔~
讨论问题可以加禁水群:我们一起学Android
关于我
阅读排行