自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

红涛在反思的blog

关注音视频前后端,也会分享记录一些工作、财务、感情、生活方面的思考与成长...

原创 设计模式系列:桥梁模式

一.名称二.问题(为了解决什么问题)一个对象有多个维度的变化,需要将这些维度抽离出来,让其独立变化设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的...

2016-02-29 15:53:43

阅读数 1498

评论数 0

原创 设计模式系列:享元模式

一.名称二.问题(为了解决什么问题)系统中存在大量相似的对象 需要缓冲池的场景三.解决方案(主要体现在uml和核心代码上) 享元模式是池技术的重要实现方式,定义:使用共享对象可有效的支持大量的细粒度的对象。 仅仅是一个优化性能的解决方案. 在享元模式中,存储这些共享对象的地方成为...

2016-02-29 15:53:20

阅读数 822

评论数 0

原创 设计模式系列:解释器模式

一.名称二.问题(为了解决什么问题)在以下情况下可以使用解释器模式:有一个简单的语法规则,比如一个sql语句,如果我们需要根据sql语句进行rm转换,就可以使用解释器模式来对语句进行解释。 一些重复发生的问题,比如加减乘除四则运算,但是公式每次都不同,有时是a+b-cd,有时是ab+c-d,等等...

2016-02-29 15:52:06

阅读数 731

评论数 1

原创 设计模式系列:状态模式

一.名称二.问题(为了解决什么问题)  在以下情况下可以使用状态模式:• 对象的行为依赖于它的状态(属性)并且可以根据它的状态改变而改变它的相关行为。 • 代码中包含大量与对象状态有关的条件语句,这些条件语句的出现,会导致代码的可维护性和灵活性变差,不能方便地增加和删除状态,使客户类与类库之间的...

2016-02-29 15:51:39

阅读数 759

评论数 0

原创 设计模式系列:访问者模式

一.名称二.问题(为了解决什么问题)三.解决方案(主要体现在uml和核心代码上)访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人员...

2016-02-29 15:48:59

阅读数 719

评论数 0

原创 设计模式系列:备忘录模式

一.场景保存和恢复状态或操作时,可以使用这个模式,例如游戏中的保存点。二.定义及体现了什么设计原则定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在改对象之外保存这个状态,这样以后就可将对象恢复到原先保存的状态。三.类图或时序图四.代码多状态的备忘录/** * Created by an...

2016-02-29 15:48:44

阅读数 709

评论数 0

原创 设计模式系列:门面模式

引入大家有没有比较过自己泡茶喝去茶馆喝茶的区别呢?自己泡茶需要自行准备茶叶、茶具和开水,而去茶馆喝茶,最简单的方式就是跟茶馆服务员说想要一杯什么样的茶(铁观音、碧螺春等等)。正因为茶馆有服务员,顾客无须直接和茶叶、茶具、开水等交互,整个泡茶过程由服务员来完成,顾客只需与服务员交互即可,非常简单省事...

2016-02-29 15:48:17

阅读数 720

评论数 0

原创 设计模式系列:观察者模式

一.名称二.问题(为了解决什么问题)很好辨认,举一些常见的例子: 猫鼠游戏 广播收音机 事件监听等等三.解决方案(主要体现在uml和核心代码上)定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。其实观察者模式的更细节的1对1就是接口...

2016-02-29 15:47:50

阅读数 889

评论数 1

原创 设计模式系列:组合模式

一.名称二.问题(为了解决什么问题)比较好辨别,因为使用范围很窄 当有一个结构可以组合成树形结构,且需要向客户端提供一致的操作接口,使得客户端操作忽略简单元素与复杂元素,如维护和展示部分-整体关系的场景,如树形菜单、文件和文件夹管理。 从一个整体中能够独立出部分木块或功能的场景。 当有一个结构可以...

2016-02-29 15:47:23

阅读数 2041

评论数 0

原创 设计模式系列:迭代器模式

迭代器模式

2016-02-29 15:46:54

阅读数 549

评论数 0

原创 设计模式系列:适配器模式

一.名称二.问题(为了解决什么问题)适配器最好在详细设计阶段不要考虑它,它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题,是一个“补救”模式。解决兼容问题。 场景:系统扩展时,需要使用一个已有的类,但这个类又不符合系统的接口,怎么办?使用适配器模式。需要使用一个类的功能,但是该类的...

2016-02-29 15:46:28

阅读数 627

评论数 0

原创 设计模式系列:策略模式

一.引入1.案例计算a+b, a-b2.面向实现编程方案定义一个Calcuate类,里面有两个方法,一个加法,一个减法3.面向设计编程方案把加法和减法封装成两个类二.场景1.应用场景:多个类只有在算法或行为上稍有不同的场景。 算法需要自由切换的场景。 需要屏蔽算法规则的场景。2.策略模式的优点...

2016-02-29 15:45:43

阅读数 655

评论数 0

原创 设计模式系列:装饰者模式

一.引入1.案例  比如,三个继承关系:Father,Son,GrandSon三个类,我要在son类上增加一些功能怎么办?2.面向实现编程方案  修改Son,这种方案会有大问题,因为你增强的功能是是修改Son的方法还是增加Son的方法,是否会对GrandSon造成影响呢?3.面向设计编程方案  通...

2016-02-28 18:04:15

阅读数 722

评论数 0

原创 设计模式系列:责任链模式

引入1.案例2.面向实现编程方案首先来看一段代码: public void test(int i, Request request){ if(i==1){ Handler1.response(request); }else if(i == 2...

2016-02-28 18:03:55

阅读数 698

评论数 0

原创 设计模式系列:命令模式

引入1.案例2.面向实现编程方案  如果我们用面向事项的方式来实现的话:会直接让调用者(invoker)和每个接受者(recevier)之间交互,产生耦合.3.面向设计编程方案  命令模式主要的就是在他们中间增加一层,命令层,来隔开这两者之间的交互,调用者和命令之间交互,命令再去调用具体的接受者来...

2016-02-28 18:03:38

阅读数 738

评论数 0

原创 设计模式系列:中介者模式

一.引入1.案例:假设计算机1,2,3,4之间要相互通信。2.面向实现编程方案:类Computer1中要保存类Computer2、类Computer3和类Computer4实例,才能调用Computer2、Computer3、Computer4方法中的Comunicate方法。 。。。 。。。...

2016-02-28 18:02:59

阅读数 1724

评论数 0

原创 设计模式系列:原型模式

一.场景  创建新对象成本较大(如初始化需要占用较长的时间,占用太多的CPU资源或网络资源),新的对象可以通过原型模式对已有对象进行复制来获得,如果是相似对象,则可以对其成员变量稍作修改。二.定义及体现了什么设计原则  原型模式的简单程度仅次于单例模式和迭代器模式。正是由于简单,使用的场景才非常的...

2016-02-28 18:02:36

阅读数 623

评论数 0

原创 设计模式系列:代理模式

一.名称二.问题(为了解决什么问题)我相信第一次接触代理模式的读者肯定非常郁闷,为什么要用代理呢?我们来想想现实世界,打官司为什么要找一个律师?因为你不想参与中间过程的是是非非,只要完成自己的答辩就可以了,其他的比如事前调查、事后追查都由律师来搞定,这就是为了减轻你的负担。代理模式的使用场景非常多...

2016-02-28 18:01:58

阅读数 696

评论数 0

原创 设计模式系列:建造者模式

一.场景  需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。   隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。   通俗示例:在很多游戏软件中,地图包括天空、地面、背景等组成部分,人物角色包括人体、服装、装备等组成部分,可以使用建造者模式对其进行...

2016-02-28 18:01:29

阅读数 962

评论数 0

原创 设计模式系列:模板方法模式

一.名称二.问题(为了解决什么问题)三.解决方案(主要体现在uml和核心代码上)  定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义改算法的某些特定步骤。   主要体现了依赖倒置,里氏替换,开闭原则。这主要做的也是增加了一层实现了解耦和复用。 抽...

2016-02-28 18:01:05

阅读数 636

评论数 0

原创 设计模式系列:抽象工厂模式

一.名称  抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。   例如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电器厂1生产电视机类型1和电冰箱类型1,海尔电器厂2生产电视机类型2和电冰箱类型2,这个时候就必须...

2016-02-28 18:00:39

阅读数 720

评论数 0

原创 设计模式系列:工厂方法模式

一.名称体现了:依赖倒置,开放封闭,单一职责,接口隔离,迪米特法则,里氏替换原则。体现了所有的设计原则。 抽象类和继承——依赖倒置 抽象类——开闭原则 类间解耦——迪米特原则 抽象类——里氏替换原则工厂方法模式主要通过增加抽象层来实现解耦。这个是这个模式的核心。二.问题(为了解决什么问题)...

2016-02-28 18:00:12

阅读数 755

评论数 0

原创 设计模式系列:单例模式

单例实现

2016-02-28 17:59:29

阅读数 1592

评论数 0

原创 android内存泄露分析工具MAT详解

一.准备1.什么是MAT  Eclipse提供的一个内存分析工具。它是一个功能丰富的 JAVA 堆转储文件分析工具,可以帮助你发现内存漏洞和减少内存消耗。   android studio未集成该插件   需要你下载独立版   android studio的DDMS可以生成hprof是什么文...

2016-02-28 17:55:45

阅读数 1011

评论数 0

原创 程序的链接、装载和库——《程序员的自我修养》笔记

一.计算机软件系统体系结构: 计算机系统软件体系结构采用一种层的结构,有人说过一句名言: 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。 这句话几乎概括了计算机系统软件体系结构的设计要点,整个体系结构从上到下都是按照严格的层次结构设计的,不仅是计算机系统软件整个体系是这样的,...

2016-02-28 17:53:44

阅读数 794

评论数 0

转载 android虚拟机详解(5%原创)

android5.0之前使用的虚拟机是Dalvik虚拟机,这个虚拟机在JVM的基础上做了一定的优化。android5.0之后,android采用了新的虚拟机ART,本文主要对Dalvik、JVM、ART之间进行对比。一.Dalvik虚拟机1.概念  Dalvik虚拟机是Android程序的虚拟机,...

2016-02-28 17:52:26

阅读数 4125

评论数 0

转载 android的编译和运行过程深入分析

首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,此过程对了解android的编译和运行过程有很大的帮助Android 编译打包apk的流程   首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,示意图如下,其中包含编译、链...

2016-02-28 17:51:50

阅读数 1711

评论数 0

原创 JVM系列1:java内存区域分配

java内存区域图示: 具体区域分配如下:一.程序计数器1.定义  程序技术器,是一块较小的内存区域。它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等基...

2016-02-28 17:51:14

阅读数 672

评论数 0

原创 java程序的运行过程

最近想系统的研究一下android的内存泄露相关问题,所以系统的学习了和重温了相关的知识,本部分会从操作系统、编译原理、组成原理的角度入手来分析这个问题。一.一般应用程序的装入和链接  在多道程序环境下,要使程序运行,必须先为之创建进程。而创建进程的第一件事情,便是将程序和数据装入内存。如何将一个...

2016-02-28 17:50:25

阅读数 3088

评论数 0

原创 人生终其一生的意义和目的是什么?

有一天脑子中突然冒出一个问题:人生终其一生的目的和意义是什么?我如果一直像现在这样每天在公司加班学习到9点10点,每周末都用来学习,我实现了自己的目标,难道我的人生就有意义了,就丰盈了吗?  恰好,周末读了《富兰克林自传》,很受启发。目前想到的一个回答:人生意义在于经历、感受,不断学习,完善自我,...

2016-02-28 11:09:18

阅读数 1962

评论数 1

原创 PHP开发记录

组内有个同学前段时间转去了PHP组,早晨遇到了她,咨询了一些关于PHP开发的问题,记录于此,方便未来翻阅:1.背景:毕业半年都在做android开发,此前她会写一些python脚本,此前主要使用的开发语言是java,算法基础较好。她花费了不到一周的时间看了一下PHP的语法,然后从android转去...

2016-02-19 09:44:39

阅读数 756

评论数 0

原创 第三方图片加载框架对比分析

glideGoogle推荐的图片加载库,专注于流畅的滚动。1.优点 1)使用RGB_565,内存占用比Picasso小一半。 2)图片展示和页面的生命周期一致(对context有类型要求) 3)相比Picasso,Glide在缓存策略和加载GIF方面略胜一筹 减少了缓存文件的大小 Pic...

2016-02-18 21:32:35

阅读数 2534

评论数 0

原创 设计模式系列:概论

对于普遍的程序员来说,设计模式并不新鲜。网上、书店可以找到各种设计模式的资料。很多的公司招聘技术人员都把它作为一个衡量标准。自己最近阅读了n本设计模式相关的书籍、也查找了一些网上的资料,在与同事的交流中,体会较深。打算写一系列的博客来分享自己的技术体会和心得。  本系列博客的重心: 实例讲解,对每...

2016-02-05 16:13:27

阅读数 921

评论数 0

转载 源代码就是设计

把源代码看作是一份工程文档——设计——完全颠覆了我对自己所选择的职业的看法。它改变了我看待一切事情的方式。此外,我对它思考的越多,我就越觉得它阐明了软件项目常常遇到的众多问题。更确切地说,我觉得大多数人不理解这个不同的看法,或者有意拒绝它这样一个事实,就足以说明很多问题。几年后,我终于有机会把我的...

2016-02-05 09:54:27

阅读数 1446

评论数 0

转载 编程每一天(Write Code Every Day)

去年秋天,我的个人项目似乎走到了尽头:我一直没能取得必要的进展,在不牺牲我的主业(可汗学院的全职工作) 的情况下,我无法完成更多的个人编程事项。  我个人项目上的工作始终存在着几个严重问题。我把这些工作主要放在周末,但有时也可能是周末的晚上。事实上,这种安排根本不合适。想要完成如此众多的工作(如果...

2016-02-05 09:38:39

阅读数 742

评论数 0

原创 android广告栏banner封装

一.原因  最近在做开发时,发现一个问题:凡是涉及广告banner的地方都是一份代码拷贝来拷贝去,完全未封装,将所有的实现都暴露在activity和fragment中。这样子导致以后想在某个页面引入一个banner非常的繁琐麻烦,且不利于代码的维护。而且产品又特别喜欢在页面上加banner。最近时...

2016-02-02 16:16:05

阅读数 3610

评论数 2

原创 2016.02.01技术成长思考

问题:在开发的过程中,越来越暴露出自己的一个问题:空谈较多,代码实践能力较差。 解决方案:以后写博客,一定要展示出完整的代码思考。 talk is cheep, show me your code.

2016-02-01 15:50:49

阅读数 730

评论数 0

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