代理模式

代理模式介绍

代理模式(Proxy Pattern)也称为委托模式,在我们日常生活中也不少见,对于程序员来说最常接触的莫过于代理上网,连上代理服务器地址,就可以轻松畅游全世界的网络;还有每天吃饭时赶进度是常事,叫公司的同事帮忙买饭也是一种代理;如果你碰到辞职老板不给你发工资,那么你还得请个律师帮你打官司,这也是一种代理。总而言之,也许你并不留意,但是代理的确无处不在,现实生活中如此,我们的Code世界也是如此。

Read more   2019/10/17 posted in  算法

备忘录模式

备忘录模式介绍

备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时说的“后悔药”。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保护的这些对象状态的完整性以及内部实现不向外暴露。

Read more   2019/10/17 posted in  算法

观察者模式

观察者模式介绍

观察者模式是一个使用率非常高的模式,它最常用的地方是GUI系统、订阅 —— 发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品的需求修改,应用界面也会经常性变化,但是业务逻辑基本变化不大,此时,GUI系统需要一套机制来应对这种情况,使得UI层与具体的业务逻辑解耦,观察者模式此时就派上用场了。

Read more   2019/10/16 posted in  算法

策略模式

策略模式介绍

在软件开发中也常常遇到这样的情况:实现某一个功能可以有多种算法或策略,我们根绝实际情况选择不同的算法或者策略来完成该功能。
针对这种情况,一种常规的方法是将多种算法写在一个类中。但是当多个算法集中在一个类中时,这个类就会变得臃肿,这个类的维护成本会变高,在维护时也更容易引发错误。如果我们需要增加一种新的排序算法,需要修改封装算法类的源代码。这就明显违反了我们所说的OCP原则和单一职责原则。
如果将这些算法或者策略抽象出来,提供一个统一的接口,不同的算法或者策略有不同的实现类,这样在程序客户端就可以通过注入不同的实现对象来实现算法或者策略的动态替换,这种模式的可扩展性、可维护性也就更高,这就是策略模式。

Read more   2019/10/15 posted in  算法

适配器模式

适配器模式介绍

适配器模式在我们的开发中使用率极高,从代码中随处可见的Adapter就可以判断出来。从最早的ListView、GridView到现在最新的RecyclerView都需要使用Adapter,并且在开发中我们遇到的优化问题、出错概率较大的地方也基本出自Adapter。

说到底,适配器是将两个不兼容的类融合在一起,它有点像粘合剂,将不同的东西通过一种转换使得它们能够协作起来。例如,经常碰到要在两个没有关系的类型之间进行交互,第一个解决方案就是修改各自类的接口,但是如果没有源代码或者我们不愿意为了一个应用而修改各自的接口,此时我们往往会使用一个Adapter,在这两种接口之间创建一个“混血儿”接口,这个Adapter会将这两个接口进行兼容,在不修改原有代码的情况下满足需求。

Read more   2019/10/15 posted in  算法

外观模式(门面模式)

外观模式介绍

外观模式(Facade)在开发过程中的运用频率非常高,尤其是在现阶段各种第三方SDK充斥在我们的周边,而这些SDK很大概率会使用外观模式。通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节。当然,在我们的开发过程中,外观模式也是我们封装API的常用手段,例如网络模块、ImageLoader模块等。

Read more   2019/10/15 posted in  算法

装饰模式

装饰模式简介

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

Read more   2019/10/15 posted in  算法

享元模式

享元模式介绍

享元模式是对象池的一种实现,它的英文名称叫做Flyweight,代表轻量级的意思。享元模式用来尽可能减少内存使用,它适合用于存在大量重复对象的场景,来缓存可共享的对象,达到对象共享、避免创建过多对象的效果,这样一来就可以提升性能,避免内存溢出等。

享元对象中的部分状态是可以共享,可以共享的状态称为内部状态,内部状态不会随着环境变化;不可共享的状态称为外部状态,它们会随着环境的改变而改变。在享元模式中会创建一个对象容器,在经典的享元模式中该容器为一个Map,它的键是享元对象的内部状态,它的值就是享元对象本身。客户端程序通过这个内部状态从享元工厂中获取享元对象,如果有缓存则使用缓存对象,否则创建一个享元对象并且存入容器中,这样一来就避免创建过多对象的问题。

Read more   2019/10/14 posted in  算法

Android性能优化

Profile GPU Rendering

这是手机开发的一个辅助工具。

功能特点:

  • 它是一个图形检测工具,能实时反应当前绘制的耗时。
  • 横轴表示时间,纵轴表示每一帧的耗时。
  • 随着时间推移,从左到右的刷新呈现。
  • 提供了一个标准的耗时,如果高于标准耗时,表示当前这一帧丢失。

打开Profile GPU Rendering后可以看到实时刷新的彩色图,每一根竖线表示一帧,由多个颜色组成。

Read more   2019/10/8 posted in  Android

iTerm2工具学习使用

之前也简单使用过iTerm2,但是没感觉到和Mac系统终端有太大的区别。所以现在决定好好了解,系统的学习下iTerm2来提供自身的开发效率。

Read more   2019/10/7