JS技术

《Android源码设计模式解析》读书笔记——Android中你应该知道的设计模式 - 赵凯强 - 博客频道 - CSD(3)

字号+ 作者:H5之家 来源:H5之家 2015-12-14 16:21 我要评论( )

这里以我的一个开源项目KLog来说吧,在最开始写这个类的时候,就只有KLog这一个类,完成基本的Log打印功能,后来又添加了JSON解析、XML解析、Log信息存储等功能,这个时候一个类就不太合适了,于是我把JSON、XML、F

这里以我的一个开源项目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开发者,喜欢技术分享,热爱开源。

  • 上一篇Android重难点解析——面试中可能被问到的那些问题
  • 顶 5 踩 0

    我的同类文章

    猜你在找

    查看评论

    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

    博客之星

    博主正在参加2015年博客之星的选举,如果我的文章对你有帮助的话,可以投我一票,支持一下,谢谢!

    投票地址

    个人资料


    bz419927089

  • 访问:525754次
  • 积分:7921
  • 等级:

    积分:7921

  • 排名:第1302名
  • 个人说明


    不是大牛,不单独回答问题


    我的GITHUB,欢迎follow


    Android重难点解析,不点后悔~


    讨论问题可以加禁水群:我们一起学Android

    关于我

    阅读排行

  • Android屏幕适配全攻略(最权威的官方适配指导)(37535)
  • Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神(19466)
  • 【凯子哥带你夯实应用层】Android的Google官方设计指南(上)(12369)
  • 【凯子哥带你学Framework】Activity启动过程全解析(9164)
  • 【凯子哥带你做高仿】“煎蛋”Android版的高仿及优化(一)——逆向工程及TcpDump抓包入门(8711)
  • Android相关问题的好文章整理——温故而知新,可以为师矣(8552)
  • 原来Github上的README.md文件这么有意思——Markdown语言详解(7907)
  • 【Android进阶】Activity和Fragement中onSaveInstanceState()的使用详解(7837)
  • 【Android进阶】android:configChanges属性总结(7762)
  • 【Android进阶】关于PagerAdapter的使用方法的总结(7683)
  •  

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • JavaScript复习笔记--字符串

      JavaScript复习笔记--字符串

      2016-01-27 17:16

    • Swift 2.0学习笔记(Day48)——类型检查与转换 - 关东升 - 博客频道 - CSDN.NET 关东升 iO

      Swift 2.0学习笔记(Day48)——类型检查与转换 - 关东升 - 博客频道

      2015-12-14 18:16

    • 有趣的Ruby-学习笔记1 - 我可以接受失败,但我不能接受放弃。--迈克尔 乔丹 - 博客频道 - CSDN.NET

      有趣的Ruby-学习笔记1 - 我可以接受失败,但我不能接受放弃。--迈克

      2015-12-14 17:17

    • leetcode笔记:Spiral Matrix - liyuefeilong的专栏 - 博客频道 - CSDN.NET

      leetcode笔记:Spiral Matrix - liyuefeilong的专栏 - 博客频道 - CS

      2015-12-13 12:03

    网友点评
    t