
设计模式
文章平均质量分 85
由此及彼
代码可以更优雅。
展开
-
Android设计模式源码解析之责任链模式
1. 模式介绍模式的定义一个请求沿着一条“链”传递,直到该“链”上的某个处理者处理它为止。模式的使用场景一个请求可以被多个处理者处理或处理者未明确指定时。2. UML类图角色介绍Client:客户端Handler:抽象处理者ConcreteHandler:具体处理者3. 模式的简单实现简单实现的转载 2016-08-10 09:47:23 · 375 阅读 · 0 评论 -
从源码分析,初步了解开源项目SlidingMenu(侧滑菜单)
我们看到的很多APP都有侧滑菜单的功能,今天我们学习一个Github上的开源项目SlidingMenu,对SlidingMenu 还不是很了解的童鞋,可以参考下本博客。本博客从源码入手,写一个小Demo引入SlidingMenu,后续开发大家可以自行扩展。jfeinstein10/SlidingMenuGitHub链接: https://github.com/jfeinstein10/Sl原创 2017-01-17 16:07:28 · 367 阅读 · 0 评论 -
JavaSE系列:必知必会的异常(概述)
你能保证自己写的程序永远不出错?就算程序不出错,你能保证用户总是按你的意愿输入?就算用户聪明且配合,你能保证程序的操作系统永远稳定?你能保证程序的硬件不会突然坏掉?你能保证网络永远畅通?···正因为太多的无法保证情况,因此我们需要异常机制。通过异常机制我们可以使异常处理代码和正常业务代码分离,让程序代码更佳优雅,提高程序的健壮性,今天我们简单了解一下异常。(异常概述)原创 2017-01-16 21:04:54 · 322 阅读 · 0 评论 -
一个登录Demo初识MVP
从我们的项目到招聘网站的JD,处处可见Android MVP 模式的身影。项目越来越庞大,开发越来越多,MVP的优势越来越明显。今天我们通过一个简单的登录Demo,初步学会MVP的使用。首先,什么是MVP?MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍MVC。在MVC模式中,Activity应该是属于View这一层。而实质上,它既承担了V原创 2017-03-08 16:20:45 · 458 阅读 · 0 评论 -
项目实战:几十行代码实现更加强大的Log,全方位输出类-方法-行数-信息
在项目开发中,我们经常使用Log帮助我们调试代码。但是,Log可以更加强大。在这里我对Log进行封装,借助StackTraceElement类,几十行代码实现更加强大的Log,全方位输出类-方法-行数-内容。我们先看一下Android的Log: /** * Send a {@link #DEBUG} log message. * @param tag Used t原创 2017-03-22 19:19:26 · 849 阅读 · 0 评论 -
项目实战:超实用小工具isFastClick解决重复点击按钮问题
相信大家在项目开发中都遇到过这种case,点击按钮时,由于手机一时卡顿或者手速过快,造成按钮重复多次点击,跳转生成多个Activity(然后一个个关)或者其他重复操作。现在,就让我们通过几行代码一劳永逸的解决它。小工具的核心思想就是借助System.currentTimeMillis()计算多次点击按钮的时间差,如果这个时间差很小,我们就认为这是无效的重复点击。封装一个Utils工原创 2017-04-01 13:46:31 · 1709 阅读 · 0 评论 -
项目实战:关于format(String)你不知道的那些事
在项目中有一种很常见的case就是字符串拼接,以我们专车下单页的企业规则校验场景为例,如图,我们来分析这一句提示文案:立即叫车服务不符合企业用车规则,无法用车它是由两部分组成,动态的当前服务类型(立即叫车)+静态的固定文案(服务不符合企业用车规则,无法用车)。因为我们现在有很多服务类型(立即叫车、预约用车、日租、半日租、接机、送机、定制···),我们需要根据用户选择的服务类原创 2017-03-16 11:36:27 · 549 阅读 · 0 评论 -
单例模式详解
一、 概述1.1 定义确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。1.2 使用场景确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源;或者某种类型的对象应该有且只有一个。eg:创建一个对象需要消耗的资源过多,如访问IO和数据库资源。1.3 关键点构造函数不对外开放,一般为 private ;通过一个静态方法转载 2017-03-27 10:19:27 · 393 阅读 · 0 评论 -
The "Double-Checked Locking is Broken" Declaration(你不知道的单例)
Double-Checked Locking is widely cited and used as an efficient method for implementing lazy initialization in a multithreaded environment.Unfortunately, it will not work reliably in a platform inde转载 2017-03-27 10:17:31 · 705 阅读 · 0 评论 -
JavaSE系列:从源码和API分析StringBuffer(概述、构造方法)
下面我们将从概述、构造方法···几个方面简单介绍StringBuffer:概述,提到StringBuffer,下意识的蹦出两点,1.我们如果通过String对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题。2.线程安全的可变(长度和内容)字符序列。ps:线程安全:同步,依次顺序执行,安全性高;线程不安原创 2017-01-06 11:40:53 · 310 阅读 · 0 评论 -
项目实战:借鉴Android API源码(Splitter-split和TextView-setText),不惧NullPointerException(文末彩蛋)
NullPointerException空指针异常可以说是我们开发中最常遇到的Bug,因此我们处处判空,胆战心惊。处处判空确实可以解决空指针异常的Crash。但处处判空未免过于草木皆兵,而且写出来的代码十分不优雅,多余判断效率低下,这不是我们的Style!这里,我们由点到面,借鉴一下Android API中Splitter类的split方法和TextView类的setText方法,我们原创 2017-02-06 15:36:50 · 1167 阅读 · 0 评论 -
Java JDK中的静态代理、动态代理&Cglib动态代理
代理模式代理模式是常用的Java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托 类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。按照代理的创建时期,代理类可以分为两种。静态转载 2016-12-20 11:26:08 · 330 阅读 · 0 评论 -
mvp架构模式
喜欢NBA的人可能很容易就想到了最有价值球员。但是此mvp非彼MVP,此mvp指的是现在Android开发中比较常见的一种软件架构模式。mvp架构模式是Google官方推荐的架构模式,特别是近年来的新项目,mvp+retrofit+rxjava+dragger2配合使用已经在引领程序界的潮流了,在github上可以轻易的搜到一大堆这样的开源项目。前端时间笔者也在公司的一个sdk上进行了尝试,在此算转载 2016-10-22 17:06:48 · 377 阅读 · 0 评论 -
你不知道的TextView实现原理
在前面一个系列的文章中,我们以窗口为单位,分析了WindowManagerService服务的实现。同时,在再前面一个系列的文章中,我们又分析了窗口的组成。简单来说,窗口就是由一系列的视图按照一定的布局组织起来的。实际上,每一个视图都是一个控件,这些控制可以将自己的UI绘制在窗口的绘图表面上,同时还可以与用户进行交互,即获得用户的键盘或者触摸屏输入。在本文中,我们就详细分析窗口控件的上述实现原理。转载 2016-09-27 09:56:43 · 521 阅读 · 0 评论 -
Android Volley完全解析(一),初识Volley的基本用法
1. Volley简介我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。不过HttpURLConnection和Http转载 2016-09-27 10:27:31 · 254 阅读 · 0 评论 -
Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析
在前文中,我们简要介绍了Android应用程序窗口的框架。Android应用程序窗口在运行的过程中,需要访问一些特定的资源或者类。这些特定的资源或者类构成了Android应用程序的运行上下文环境,Android应用程序窗口可以通过一个Context接口来访问它,这个Context接口也是我们在开发应用程序时经常碰到的。在本文中,我们就将详细分析Android应用程序窗口的运行上下文环境的创建过程。转载 2016-09-28 10:55:24 · 418 阅读 · 0 评论 -
Android Volley完全解析(四),带你从源码的角度理解Volley
经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚。因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地梳理一遍。同时,这也是Volley系列的最后一篇文章了。其实,Volley的官方文档中本身就附有了一张Volley的工作流程图,如下图所示。多数朋友突然看到一张这样的图,应转载 2016-09-28 13:49:01 · 383 阅读 · 0 评论 -
Android MVP模式-简单易懂的介绍方式
Android MVP 模式1 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式。当项目越来越庞大、复杂,参与的研发人员越来越多的时候,MVP 模式的优势就充分显示出来了。MVP模式(Model-View-Presenter)可以说是MVC模式(Model-View-Controller)在Android开发上的一种变种、进化模式。后者大家可能比较熟悉,就转载 2016-10-25 17:51:33 · 285 阅读 · 0 评论 -
深入浅出Android消息机制的原理(示意图和源码)
Android系统中的视图组件并不是线程安全的,如果要更新视图,必须在主线程中更新。因此,我们通过Handler在子线程中通知主线程,让主线程做更新操作。这个过程中消息机制起着重要的作用。下面,我们就来分析一下Android中的消息机制。熟悉Windows编程的朋友知道Windows程序是消息驱动的,并且有全局的消息循环系统。Google参考了Windows的消息循环机制,也在An原创 2016-10-31 14:16:13 · 391 阅读 · 0 评论 -
10min初识观察者模式
今天学习了Android设计模式源码解析之观察者模式,写一篇读后感,10min快速了解观察者模式。1.模式的定义定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。2.模式的使用场景关联行为场景。需要注意的是,关联行为是可拆分的,而不是“组合”关系;事件多级触发场景;跨系统的消息交换场景,如消息队列、事件总线的处理机制原创 2016-11-21 17:00:38 · 428 阅读 · 0 评论 -
项目实战:封装友盟,数据化监控应用
《从理论到实践,埋点专车费用明细模块》在简书首页、人人都是产品经理等各大媒体取得了不错的反响。正所谓授人以鱼不如授人以渔。今天我们从代码层面进行埋点实现,引入友盟并进行封装,然后视具体规划埋点,数据化监控我们的应用,数据分析,Go。首先,参考官方文档申请key,添加权限,进行一系列准备操作。耐心花10~30 min 都看一遍哈。友盟统计分析Android文档http://dev原创 2017-06-01 16:58:09 · 818 阅读 · 0 评论