Tim's Track

书写是为了更好地思考


  • 首页

  • 关于

  • 归档

  • 标签

  • 搜索

Android 源码中的装饰者模式

发表于 2017-09-05 | 分类于 原理分析 , Android 进阶 , 设计模式 | 阅读次数
字数统计 1,923 | 阅读时长 8

装饰者模式的定义

装饰模式(Decorator Pattern) 也称包装模式(Wrapper Pattern),是结构型设计模式之一,使用一种对客户端透明的方式来动态地拓展对象的功能,同时它也是继承关系的一种替代方案之一。

通过装饰者模式可以动态地给一个对象添加一些额外的职责。就增加功能而言,装饰模式相比生成子类更灵活。因为它装饰者持有一个被装饰者的引用,因此可以方便地调用具体被装饰者对象中的方法,因此可以在不破坏原类层次结构的情况下为类增加一些功能,我们只需要在被装饰者对象的相应方法前后增加相应的功能逻辑即可。

阅读全文 »

Android 源码中的享元模式——Message 复用原理

发表于 2017-08-26 | 分类于 原理分析 , Android 进阶 , 设计模式 | 阅读次数
字数统计 1,551 | 阅读时长 6

介绍

享元模式是对象池的一种实现,它的英文名为 Flyweight,代表轻量级的意思。

享元模式用来尽可能==减少内存使用量==,它适合用于可能存在大量对象的场景,来==缓存可共享的对象==(例如 Message、Java 中的字符串常量池),从而实现对象共享、避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除等。

享元模式中的部分状态是可以共享的,

  • 可以共享的状态称为内部状态。内部状态不会随着环境变化
  • 不可共享的状态则称之为外部状态,他们会随着环境的改变而改变。

享元模式会建立一个对象容器,在经典的享元模式中,该容器为一个 Map,它的键是享元对象的内部状态,它的值就是享元对象本身。

阅读全文 »

Android 源码中的模板方法模式——AsyncTask解析

发表于 2017-08-24 | 分类于 原理分析 , Android 进阶 , 设计模式 | 阅读次数
字数统计 1,924 | 阅读时长 8

前言

假设我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变的。
就好像执行程序的流程:

  1. 检查代码的正确性
  2. 链接相关代码
  3. 编译相关代码
  4. 执行程序

对于不同的语言,上述 4 个步骤都是不一样的,但是它们的执行流程是固定的,这类问题的解决方案就是我们介绍的模板方法模式。

阅读全文 »

行为型设计模式之备忘录模式

发表于 2017-08-21 | 分类于 设计模式 , Android 原理分析 , Android 进阶 | 阅读次数
字数统计 3,549 | 阅读时长 14

备忘录模式的定义

备忘录模式是一种行为型设计模式,该模式用于保存对象当前的状态,并且在之后可以再次恢复到此状态。

实现效果为:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便后续将对象恢复到原来的状态。

备忘录模式的使用场景

  1. 需要保存一个对象在某一个时刻的状态或部分状态
  2. 一个对象不希望外界直接访问其内部状态,通过中间对象可以间接访问其内部状态。(如果使用接口来让其他对象获取对象的状态,会破坏封装性)
阅读全文 »

深入理解 ThreadLocal

发表于 2017-08-21 | 分类于 并发 | 阅读次数
字数统计 3,640 | 阅读时长 15

ThreadLocal 是什么?

ThreadLocal 是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储后,只有在指定线程中才能获取到存储的数据,对于其他线程来说则无法获取到数据。

为什么要使用 ThreadLocal?

从定义我们知道 ThreadLocal 是一个用于存储本线程内部数据的类。假设没有 ThreadLocal 的话,每个 Thread 中可以输入自己的一个本地变量,但是在整个 Thread 的生命周期中,如果要穿梭很多 class 的很多 method 来使用这个本地变量的话,就要一直一直向下传送这个变量,显然很麻烦。
那么怎么才能在这个 Thread 的生命中,在任何地方都能够方便的访问到这个变量呢,这时候 ThreadLocal 就诞生了。

阅读全文 »

明白原理,轻松解决内存泄漏

发表于 2017-08-19 | 分类于 原理分析 , 性能优化 | 阅读次数
字数统计 4,724 | 阅读时长 18

相信「内存泄漏」 问题,是一个挺让开发者头疼的事情,笔者在回顾以为代码时,惊讶发现:初学 Android 时,许多不修边幅的代码习惯,导致了许多内存泄漏问题,借此分析其原因,把自己挖过的坑补一下,也希望奔跑在 Android 开发道路上的你能够优雅避免。

什么是内存泄漏

  • 对于 C++ 来说,内存泄漏就是 new 出来的对象没有 delete,俗称野指针;
  • 而对于 java 而言,就是存放在堆上的 Object 无法被 GC 正常回收;
阅读全文 »

Android源码中的代理模式

发表于 2017-08-18 | 分类于 原理分析 , Android 进阶 , 设计模式 | 阅读次数
字数统计 2,174 | 阅读时长 9

代理模式的定义

代理模式也称为委托模式,为其他对象提供一种代理以控制对这个对象的访问。

代理模式的使用场景

当无法或不想访问某个对象或者访问某个对象存在困难时可以通过一个代理对象来间接访问。

为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口(或继承相同的抽象类)

阅读全文 »

深入理解 LayoutInflater

发表于 2017-08-17 | 分类于 原理分析 , Android 进阶 | 阅读次数
字数统计 3,444 | 阅读时长 16

一、概述

View rootView = LayoutInflater.from(getContext()).inflate(R.layout.bitable_grid_view, this, false);

Android 开发者对上面这行代码应该不陌生,我们通常用这个方法来渲染一个布局。其中的原理是怎么样的呢?
本文主要分析 LayoutInflater 的创建过程以及 inflate 方法的原理。

阅读全文 »
1…456
Tim Lin

Tim Lin

Live a life you will remember.

46 日志
31 分类
28 标签
GitHub
© 2020 Tim Lin
由 Hexo 强力驱动
主题 - NexT.Pisces
0%