自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (3)
  • 收藏
  • 关注

原创 工作总结及建议

1.先需求评审,让相关人员了解自己的需求,和谁配合,有问题及时反馈,产品好及时调整方案。2.只认文档不认人。一个成功的项目不在于它带来了多少价值,而在于任何人的离职请假都不影响项目的正常运作。如何做到,写好文档是基础。(接口文档,产品需求文档,UI标注图,UI切图...,代码注释)       2.1 文档共享       2.2 文档及时更新,谁负责谁维护3.产品经理应及时或者提前告知开发人员以...

2018-06-05 18:08:42 4116

原创 理财,预期收益

项目中,标的付款方式有,到期本息 、先息后本、等额本息、等额本金四种。这就意味着客户端在计算预期收益时要根据这一状态执行不同的算法。通过分析,到期本息 、先息后本为第一种算法,等额本息为第二种算法,等额本金为第三种算法。之后,在对这块代码进行了三次重构重构1:将三种算法写到工具类里,对应三种静态方法。重构2:将算法提取为接口,提供三种策略类。重构3:通过简单工厂返回具体算法类。预期收益接口publ...

2018-04-28 16:36:13 275

原创 一个Key对应多个Value

Map 一个key对应一个value,它可以满足大部分需求。但有时我要用到一个key对应多个value怎么办?1.普通做法  Map<Object,List<Object>> map=new HashMap<>();2.apache commons工具包里有个org.apache.commons.collections.map.MultiValueMap。3.开...

2018-03-27 14:53:44 24692

原创 Volley,核心架构生产者消费者模式

晚上母亲做烙饼,熟了就放到桌子上,我和姐看到桌子上有饼就拿来吃,没了就等着。这就是生产者消费者模式母亲            生产者           做饼桌子            产品容器       放饼我和我姐    消费者            吃饼生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通

2017-07-20 13:36:54 279

原创 DataProvider为项目提供基础信息

基础信息提供者接口public interface IDataProvider { /** * 项目环境类型(开发,测试,正式) * * @return */ Environment getAppEnvironment(); /** * 项目context对象 * * @return */

2017-07-19 09:45:48 753

原创 Activity,Fragment绑定生命周期,实现EventBus的自动注册、自动注销。

Glide中一个重要特性是Request可以随Activity或Fragment的onStart而resume,onStop而pause,onDestroy而clear,从而节约流量和内存,并且防止内存泄露。在阅读Glide源码后,果断将相关代码引入项目中并实现EventBus的自动注册、自动注销,其核心使用观察者模式。侦听生命周期事件的接口。public interface Lifecy

2017-07-18 15:59:17 4346

原创 桥接模式下的本地数据加载

项目中我们可以加载assets文件夹下的xml文件、txt文件、图片文件,也可加载sd卡下xml文件、txt文件、图片文件。如图这里有两个变化的维度,文件来源和数据格式。我将抽象与实现分离实现本地数据加载。代码:数据public interface Data { /** * 加载数据流 * @param inputStream */ vo

2017-07-17 16:14:32 276

原创 总结TextWatcher两种使用场景

1. 根据观察多个输入框(必填)是否输入内容,控制按钮点击状态。public class ButtonWatcher { private final Button btn; //控制按钮 private final EditText[] views; //输入框数组 public ButtonWatcher(Button btn, EditText... editTex

2017-07-17 10:32:58 448

原创 通过递归与访问者模式过滤文件

在看Fresco源码时发现了一个遍历文件夹的小模块,职责清晰、设计精妙、并有着很高的拓展性,在研究之后果断代码收藏。思路:首先利用递归遍历整个目录,如果是文件,访问者执行访问。文件树public class FileTree { /** * 遍历目录的文件树,并接收一个访问者访问每一个文件。 * @param directory 要遍历的文件

2017-07-12 10:13:08 367

原创 利用模板模式封装APP版本更新模块

在项目中做版本检查模块流程如下1. 检查版本2. 显示版本提示3. 下载apk4.  安装于是我将相关代码进行重构,定义版本更新流程的骨架而将一些方法延迟到子类去实现。public abstract class CheckVersion { public static final String APK_FILE_PATH = ""; //apk保存路径

2017-07-11 16:37:00 340

原创 利用中介者模式与观察者解决购物车与商品列表联动问题

由于项目保密性只介绍出现的问题以及我解决的思路。说明:商品分类列表:显示商品分类名称以及此分类下放入购物车商品的总数量。商品列表:显示商品信息和两个操作按钮“+”,“-”以及加入购物车数量。购物车列表:显示购物车商品信息和两个操作按钮“+”,“-”以及数量。搜索列表:显示商品信息和两个操作按钮“+”,“-”以及加入购物车数量。问题:商品列表、购物车列表、搜索列表都可

2017-07-11 10:14:57 1510

原创 利用责任链模式构建数据校验模块

这是一个比较简单的表单校验,利用责任链模式将多个数据校验以“链”的形式串联起来。目前支持三种数据校验(可拓展)1.空数据校验2.数据格式校验3.非必填项校验代码:定义校验器public interface Verify { //校验 boolean doVerify(); //设置下个校验器 void setNextVerify(Verify ve...

2017-07-03 11:57:42 2745 1

原创 利用代理模式隔离Android第三方组件(图片加载库,网络库)

利用代理模式隔离

2017-06-23 13:05:46 653 1

原创 面向切面编程(aop),实现Android网络请求

面向切面编程

2017-06-23 13:03:06 632

原创 利用组合模式与访问者模式实现Android树形控件(多层级,可拖拽)

先上图

2017-06-23 11:55:24 492

原创 linux 设备子系统 摘要

在开发中,我们都是在kernel中已有的总线上去开放设备驱动程序,如 usb_bus_type、spi_bus_type、pci_bus_type、platform_bus_type、i2c_bus_type 等,内核中已经实现了这些中线的总线驱动,我们只需实现设备device和驱动driver。在内核里,有各种各样的总线,如 usb_bus_type、spi_bus_type、pci_bus_type、platform_bus_type、i2c_bus_type 等,内核通过总线将设备与驱动分离。

2023-12-14 11:08:27 67

原创 linux 网络子系统 摘要

紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。

2023-12-14 10:50:09 138

原创 Binder IPC通讯流程 摘要

Binder 是基于 C/S 架构的。跨进程通信的过程都有 Binder 驱动的参与,因此在数据流经 Binder 驱动的时候驱动会对数据做一层转换。当 A 进程想要获取 B 进程中的 object 时,驱动并不会真的把 object 返回给 A,而是返回了一个跟 object 看起来一模一样的代理对象 objectProxy,这个 objectProxy 具有和 object 一摸一样的方法,但是这些方法并没有 B 进程中 object 对象那些方法的能力,这些方法只需要把把请求参数交给驱动即可。

2023-12-14 10:25:53 43

原创 android重试执行

重试执行

2020-03-27 14:05:51 705

原创 可以设置过期时间的Java缓存ExpiringMap

功能简介 :1.可设置Map中的Entry在一段时间后自动过期。2.可设置Map最大容纳值,当到达Maximum size后,再次插入值会导致Map中的第一个值过期。3.可添加监听事件,在监听到Entry过期时调度监听函数。4.可以设置懒加载,在调用get()方法时创建对象。github地址:https://github.com/jhalterman/expiringmap/...

2019-10-08 14:25:05 4160

转载 Launcher3源码解析

由于工作的原因,开始了Launcher的学习和开发。我拿到的源码是Android N 的Launcher3的源码。想的是一步一步对Launcher3的源码进行分析并记录,也是为了让自己遗忘的时候可以看看。下面正式开始Launcher3的源码分析,首先介绍一下主要的几个类:Launcher:主界面Activity,最核心且唯一的Activity。LauncherAppState:单例对象...

2018-12-28 10:03:55 2803

原创 Spring Ordered接口

        Java中的对象排序都会跟Comparable Comparator 这两个接口扯上关系,下面我们要说说Spring排序接口Ordered。public interface Ordered { /** * Useful constant for the highest precedence value. * @see java.lang.Integer#MIN_VALU...

2018-04-11 14:25:23 564

原创 带边框(Border)的LinearLayout

先看一下这样一个简单的布局,所展示的内容很少,上下两条分割线,两个文本。1.普通做法<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_par...

2018-03-29 15:01:41 1488

原创 适配器模式,手机充电器

        充电器、变压器、转接头这些都是我们所熟悉的。他们的作用都是将一些现有的、不匹配的、无法改变的进行转换,以满足我们的需求。以手机充电器为例,上世纪60年代后期,中国统一使用220V电压,手机充电一般5V左右,两者无法匹配。我们也无法改变现有的条件。于是充电器就发挥了它的作用,它可以将220V转换为特定的电压以满足手机充电所需。中国家用电压public class ChinaPower...

2018-03-27 17:21:51 538

原创 备忘录模式,拍电影

大家都知道拍电影的时候如果某段拍的不好演员会NG多次,当导游说重拍的时候场记会记录这段的布景,台词,演员的动作表情。等到重拍的时候恢复到开始状态。

2017-08-08 10:28:18 364

原创 规格模式,对象筛选

规格模式已经是一个非常具体的应用框架了(相对于23个设计模式),大家遇到类似多个对象中筛选查找,或者“业务规则不适于放在任何已有实体或值对象中,而且规则的变化和组合会掩盖那些领域对象的基本含义”,或者是想自己编写一个类似LINQ的语言工具的时候就可以照搬这部分代码,只要实现自己的逻辑规格书即可代码:抽象规格书public interface ISpecification { //

2017-08-04 09:47:25 251

原创 访问者模式,记者街访

访问者模式,记者街头访问

2017-06-26 10:14:09 363

原创 状态模式,运动员比赛

状态模式,运动员比赛

2017-06-26 10:13:17 243

原创 门面模式,产品经理

外观模式,收银台

2017-06-26 09:33:04 214

原创 建造者模式,煎饼果子

创建者模式

2017-06-23 13:42:42 256

原创 装饰者模式,天冷多穿点

冬天去上班,早上出门的时候如果天冷了我会加件毛衣,如果起风了加件外套。模式定义:动态的给一个对象添加一些额外的职责。案例分析:天气好只穿工作服去上班,天冷加件毛衣,有风加件外套。优点:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能注意:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式。代码:首先定义人类public class Human implement...

2017-06-23 13:32:40 289

原创 模板模式,程序员的一天

程序员的一天

2017-06-23 13:30:53 439

原创 剪不断,理还乱的对象关系

对象

2017-06-23 13:23:21 326

原创 设计,为了更好的应对变化

什么是模式? 1.是解决某些问题的办法 2.不是凭空想象的,是经验的积累和总结

2017-04-25 10:43:07 315

BottomMenu

BottomMenu拓展菜单

2013-08-26

Android api

Android中文API

2013-08-19

android spinner联动

spinner联动spinner联动spinner联动spinner联动

2013-08-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除