自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 资源 (1)
  • 收藏
  • 关注

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

模板方法模式介绍 在面向对象开发过程中,通常会遇到这样一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变,例如,执行程序的流程大致如下: (1) 检查代码的正确性 (2)链接相关的类库 (3)编译相关的代码 (4)执行程序 对于不同的程序设计语言,上述4个步骤

2017-10-07 17:02:15 464

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

适配器模式介绍 适配器模式在我们的开发中使用率极高,从代码中随处可见的Adapter就可以判断出来。从最早的ListView,GridView到现在的RecyclerView都需要使用Adapter,并且在开发中我们遇到的优化问题,出错概率较大的地方也基本都出自Adapter,这是一个让人又爱又恨的角色。 说到底,适配器是将两个不兼容的类型融合在一起,它有点像粘合剂,将不同的东西通过一

2017-10-07 09:18:46 352

原创 行为型设计模式之责任链模式

责任链模式介绍 责任链模式(Iterator Pattern),是行为型设计模式之一。什么是”链”?我们将多个结点首尾相连所构成的模型称之为链。责任链模式的定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止责任链模式的使用场景 多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决

2017-10-06 15:02:45 409

原创 结构型设计模式之代理模式

代理模式的介绍 代理模式(Proxy Pattern)也称为委托模式,属于结构型设计模式。其实不少设计模式中都有代理模式的影子,那么何为代理呢? 其实代理在我们日常生活中并不少见,对于程序员来说莫过于代理上网了,连上代理服务器地址,就可以轻松畅游全世界的网络,还有每天吃饭时赶进度是常事,叫朋友帮忙买饭也是一种代理。总而言之,也许你并不留意,但是代理的确是无处不在的,现实生活中如此,我们的C

2017-10-06 11:49:41 383

原创 解决,解耦的钥匙之观察者模式

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

2017-10-06 08:43:12 629

原创 时势造英雄之策略模式

策略模式的介绍 在软件开发中也常常遇到这样一种情况:实现某一功能可以有多种算法或者策略,我们根据实际情况选择不同的算法策略来完成该功能。例如:排序算法,可以使用插入排序,归并排序,冒泡排序等。 针对这种情况,一种常规的方法是将多种算法写在一个类中。例如,需要提供多种排序算法,可以将这些算法写到一个类中,每一个方法对应一个具体的排序算法;当然,也可以将这些排序算法封装在一个统一的方法中,

2017-10-05 14:00:07 442

原创 设计模式之抽象工厂模式的简单实现

抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pattern),也是创建型设计模式之一。在上一篇中我们介绍了工厂方法模式 那么这个抽象工厂又是怎么一回事呢? 大家联想一下现实生活中的工厂肯定都是具体的,也就是说每个工厂都会生产某一种具体的产品,那么抽象工厂意味着生产出来的产品是不确定的,那这岂不是很奇怪? 抽象工厂模式起源于以前对不同抽象系统的图形化解决方案,如不

2017-10-05 09:34:09 680

原创 设计模式之工厂方法模式的简单实现

工厂方法模式介绍 工厂方法模式(Factory pattern),是创建型设计模式之一。工厂模式是一种结构简单的模式,其在我们平时开发中应用很广泛,也许你并不知道,但是你已经使用了无数次该模式了,如Android中的Activity里的各个生命周期方法,以onCreate方法为例,它就可以看作是一个工厂方法,我们在其中可以构造我们的View并通过setContentView返回给framewor

2017-10-04 22:31:17 791

原创 单例模式的几种实现方式

单例模式介绍 单例模式是应用最广的模式之一,也可能是很多初级工程师唯一会使用的设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。懒汉模式 懒汉模式是声明一个静态对象,并且在用户第一次调用getInstance时进行初始化,而饿汉模式是声明静态对象时就已经初始化。懒汉单例模式实现如下:public class Singleton{private static Single

2017-10-04 20:41:20 931

原创 经典算法之二维数组中的查找问题

前言 数组可以说是是最简单的一种数据结构,它占据一块连续的内存并按照顺序存储数据结构。创建数组时,我们需要首先指定数组的容量大小,然后根据大小分配内存。即使我们只在数组中存储一个数字,也需要为所有的数据预先分配内存。因此数组的空间效率不是很好,经常会有空闲的区域没有得到充分利用。 由于数组中的内存是连续的,于是可以根据下标在O(1)时间读/写任何元素,因此时间效率是很高的。我们可以根据

2017-10-04 17:31:20 1585

原创 设计模式之Builder模式的简单实现

Builder模式介绍 Builder模式是一步一步创建一个复杂对象的创建型模型,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和表示隔离开来 因为一个复杂的对象有很多大量组成部件,如汽车,有车轮,方向盘,发动机,还有各种小零件等,如何将这些部件装配成一辆汽车,这个装配过程很漫长,也很复杂,对于这种情

2017-10-03 16:14:58 571

原创 面向对象六大原则之接口隔离原则

前言 接口隔离原则英文名称是InterfaceSegregation Principles,缩写是ISP。ISP的定义是:客户端不应该依赖它不需要的接口。另一种定义是:类间的依赖关系应该建立在最小的接口上。作用 接口隔离原则将非常庞大,臃肿的接口拆分成更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。目的 接口隔离的目的是系统解开耦合,从而容易重构,更改和重新部署。范例

2017-10-03 14:27:51 623

原创 面向对象六大原则之依赖倒置原则

前言 依赖倒置原则英文名称是Dependence Inversion Principle,缩写是DIP。依赖倒置原则指代了一种特定的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节的目的,依赖模块被颠倒了。依赖倒置原则关键点 (1) 高层模块不应该依赖低层模块,两者都应该依赖其抽象; (2) 抽象不应该依赖细节 (3) 细节应该依赖抽象 在Java语言中,

2017-10-03 11:53:47 544

原创 面向对象六大原则之开闭原则

前言 开闭原则的英文全称是Open Close Principle,缩写是OCP,它是Java世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活的系统。开闭原则的定义 软件中的对象(类,模块,函数等)应该对于扩展是开放的,但是,对于修改是封闭的。范例 实现图片加载缓存功能public class ImageLoader{//图片缓存ImageCache mImageCa

2017-10-03 10:18:58 666

原创 面向对象六大原则之里氏替换原则

前言 我们知道,面向对象的语言的三大特点是继承,封装,多态,里氏替换原则就是依赖于继承,多态这两大特性。里氏替换原则简单来说就是,所有引用基类的地方必须能透明地使用其子类的对象。 通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,就两个字:抽象。范例//窗口类pub

2017-10-03 07:28:54 459

原创 Java编程之Annotation全解析

前言 通过本篇的学习可以达到以下目标: 了解Annotation的作用 掌握JDK 1.5中内建的3种Annotation 掌握自定义Annotation的语法及其应用 掌握@Retention,@Target,@Documented,@Inherited注释。Annotation简介 J2SE5.0提供了很多新的特性。其中一个很重要的特性就是对元数据(Metada

2017-10-02 17:24:44 498

原创 Java面向对象基础知识

cmd命令当我们编写好一段程序后,会执行下面的cmd命令来运行java程序,以HelloWorld这个类为例$ javac HelloWorld.java$ java HelloWorldHello World123123javac:将java文件源编译成class字节码文件,如果运行指令没出错,就会产生一个HelloWorld.class的文件java:java后面跟着的

2017-10-02 13:40:53 1916 1

原创 浅谈单例模式的优缺点

前言 单例模式是运用频率很高的模式,但是,由于在客户端通常没有高并发的情况,因此,选择哪种实现方式并不会有太大的影响。即便如此,由于效率考虑,我会推荐使用DCL(两次判断一次加锁)和静态内部类实现单例。优点 (1) 由于单例模式在内存中只有一个实例,减少内存开支,特别是一个对象需要频繁地创建销毁时,而且创建或销毁时性能又无法优化,单例模式就非常明显了 (2) 由于单例模式只生成一

2017-10-02 10:58:56 13798 1

原创 动态代理及反射在工厂模式上的应用

前言 之前为读者讲解过代理机制的操作,但是讲解的代理设计属于静态代理,因为每一个代理类只能为一个接口服务,这样一来程序开发中必然会产生过多的代理。最好的做法是可以通过一个代理类完成全部的代理功能,那么此时就必须使用动态代理完成。 在Java中要想实现动态代理机制,则需要java.lang.reflect.InvocationHandler接口和java.lang.reflect.

2017-10-01 14:57:23 399

原创 Java反射机制的深入应用

前言 在上一篇文章中介绍了Java反射的基本概念以及基本应用,不熟悉的朋友可以点这里 本篇文章将重点介绍反射机制的深入应用 反射除了可以取得一个类的完整结构外,还可以调用类中的指定方法或指定属性,并且可以通过反射完成对数组的操作。通过反射调用类中的方法 如果要使用反射调用类中的方法可以通过Method类完成,操作步骤如下: (1) 通过Class类的getMethod

2017-10-01 08:24:47 270

原创 Java反射机制详解

前言通过本篇的学习可以到达以下目标了解反射的基本原理掌握Class类的使用通过Class类并结合java.lang.reflect包取得一个类的完整结构通过反射机制动态调用类中的指定方法,并能向这些方法传递参数 在Java中较为重要的就是反射机制,那么什么是反射机制呢?举个简单的例子来说,正常情况下如果已经有一个类,则肯定可以通过类创建对象;那么如果现在要求通过一个对象找到一个类找到一个类

2017-09-30 13:10:44 398

原创 Java集合系列(五)

前言 之前所讲解的Collection,Set,List接口都属于单值的操作,即每次只能操作一个对象,而Map接口与它们不同的是,每次操作的是一对对象,即二元偶对象,Map接口中的每一个元素都使用“key->value”的形式存储在集合中。

2017-09-29 08:45:30 370

原创 Java集合系列(四)

前言 上一篇介绍了Set接口及其常用子类的的基本概念及使用方法,本篇将重点介绍集合的输出(迭代输出(Iterator)和双向迭代输出(ListIterator)),foreach等等集合的输出 从之前讲解的集合操作中读者应该可以发现,如果要输出Collection,Set集合中的内容,可以将其转换为对象数组,而使用List则可以直接通过get()方法输出,但是这些都不是集合的的标准输出方式

2017-09-28 18:32:21 219

原创 Java核心编程之异常的捕获及处理

前言 本篇文章笔者准备重点介绍异常的产生原理,异常处理的基本格式,throw和throws关键字的作用,自定义异常,以及Exception与RuntimeException的区别,断言的作用等等异常的基本概念 异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须要考虑各种异常的发生,并正确做好相应的处理,这样才能

2017-09-28 13:21:58 431

原创 Java集合系列(三)

前言 上一节介绍了Collecton接口,List接口,以及其子类leiArrayList与vector的相关概念及其基本应用,本节将继续学习Collection接口的另一个子接口及其子类的基本概念以及应用Set接口 Set接口的定义 Set接口也是Collection接口的子接口,但是与Collection或List接口不同的是,Set接口中不能加入重复的元素。Set接口的定义如下

2017-09-27 21:59:14 348

原创 Java集合系列(二)

前言 通过上一篇Java集合系列(一)的介绍,想必读者们应该已经掌握好集合的基本概念了吧,接下来这篇文章笔者将会着重介绍一下集合各个接口及其常用子类的作用。Collecton接口的定义Collection接口的定义如下所示:public inteface Collection<E> extends Iterable从接口的定义中可以发现,此接口使用了泛型的定义,在操作时必须指定具体的操作类型。

2017-09-26 20:48:04 280

原创 Java集合系列(一)

基本概念 在讲解集合概念之前,先来思考这样一个问题,如果现在要保存一组对象,按照之前的做法则只能使用对象数组,但是使用对象数组操作本身有一个限制,就是数组有长度的限制;而通过一些数据结构的操作,如链表,则可以完成动态对象数组的操作,但是这些如果全部由开发人员来做,则肯定也是比较麻烦的。集合框架的特性高性能,对基本集合(动态数组,链接表,树和散列表)的实现是高效率的。所以一般很少需要人工对这些

2017-09-26 14:24:54 250

原创 Android的消息机制

前言 提到消息机制读者应该都不陌生,在日常开发中不可避免要涉及这方面的内容。从开发的角度来说,Handler是Android消息机制的上层接口,这使得在开发中只需要和Handler交互即可。Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行。很多人认为Handler的作用是更新UI,这的确没错,但是更新UI仅仅是Handler的一个特殊的使用场景。具

2017-09-26 10:50:21 264

原创 Java IO 核心操作(五)

Java常见编码简介 在计算机的世界里,任何的文字都是以指定的编码方式存在的,在Java程序的开发中最常见的是ISO8859-1,GBK/GB2312,unicode,UTF编码。 ISO8859-1:属于单字节编码,最多只能表示表示0~255的字符范围,主要在英文上的应用。 GBK/GB2312:中文的国际编码,专门用来表示文字,是双字节编码,如果在此编码中出现中文,则使用

2017-09-25 13:54:47 265

原创 Java IO核心操作(四)

BufferrdReader类 BufferReader类用于从缓冲区中读取内容,所有的输入字节数据都将放在缓冲区中,常用的方法如表所示: 范例 将System.in变为字符流放入到BufferedReader后,可以通过readLine()方法等待用户输入信息。具体操作的代码如下:import java.io.* ;public class BufferedReader

2017-09-24 17:36:33 268

原创 四大组件的运行状态

很多情况下,只有对Android体系结构有一定认识,在实际开发中才能写出优秀的代码。 Android的四大组件除了BroadcastReceiver以外,其他三种组件都必须在AndroidManifist中注册,对于BroadcastReceiver来说,它既可以在AndroidManifist中注册也可以通过代码来注册。在调用方式上,Activity,Service和BroadcastRece

2017-09-24 11:19:51 500

原创 Android通用流行框架大全

缓存图片加载网络请求网络解析数据库依赖注入图表后台处理事件总线响应式编程Log框架测试框架调试框架性能优化缓存 名称: DiskLruCache (Java实现基于LRU的磁盘缓存)Github:https://github.com/JakeWharton/DiskLruCache 图片加载 名称:Android Universal Image Load

2017-09-23 20:57:32 438

原创 Java IO核心操作(三)

整个IO包实际上分为字节流和字符流,但是除了这两个流之外,还有一组字节流-字符流的转换流。 OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象。 InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。如果以文件操作为例,则内存中的字符数

2017-09-23 15:49:49 344

原创 Java IO核心操作(二)

File类只是针对文件爱你本身进行操作,而如果想对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随机读取类,可以随机地读取一个文件中指定位置的数据。RandomAccessFile类的常用操作方法需要注意的是如果使用rw方式声明RandomAccessFile对象时,要写入的文件不存在,系统将自动进行创建。使用RandomAccessFile类写入数据为了保证可以进行随机

2017-09-22 23:45:29 272

原创 Java内存区域详解

前言对于从事从C,C++程序开发的程序开发人员来说。在内存管理领域,他们既是最高权利的“皇帝”又是从事最基础工作的“劳动人民”——即拥有一个对象的所有权,又担任着每一个对象生命开始到终结的维护责任。对于java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,由虚拟机管理内存这一切看起来都很美好。不过,也正

2017-09-21 18:26:46 371

原创 Java IO核心操作(一)

通过这篇的学习可以掌握以下目标掌握Java.io包中类的继承关系可以使用File类进行文件的操作可以使用字节流或字符流操作文件内容并区分出字节流与字符流的区别掌握内存操作输入、输出流的使用了解线程通讯流——管道流的作用掌握System类对IO的三个支持System.out,System.err,System.in可以使用打印流方便地打印输出的内容,并可以使用Java新特性格式化输出.

2017-09-20 21:24:30 360

原创 设计模式之观察者模式

什么叫观察者在解释观察者设计模式的概念之前,读者先来看一个简单的例子:现在很多的购房者都在关注着房子的价格变化,每当房子价格变化时,所有的购房者都可以观察得到,实际上以上的购房者都属于观察者,他们都在关注着房子的价格。实际上这就叫观察者设计模式,如图所示: 在Java中可以直接依靠Observable类和Observer接口轻松地实现以上功能观察者模式实现在java.util包中提供了Observ

2017-09-20 18:51:45 638

原创 设计模式之适配器设计

对于Java程序来说,如果一个类要实现一个接口,则必须要覆写此接口中的全部抽象方法,那么如果此时一个接口中定义的抽象方法过多,但是在子类中又用不到这么多抽象方法,则使用起来肯定很麻烦,所以此时就需要一个中间的过渡,但是此时过渡类又不希望被直接使用,所以将此过渡类定义成一个抽象类最合适,即一个接口首先被一个抽象类先实现(此抽象类通常被称为适配器类),并在抽象类中实现接口的若干方法(方法体为空),则以后

2017-09-20 18:21:36 220

原创 设计模式之代理设计

代理设计也是在java开发中使用较多的一种设计模式。 所谓的代理设计就是代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理,就好像在生活中经常使用的代理上网一样,客户通过网络代理连接网络,由代理服务器完成用户权限和访问限制等与上网相关的的操作,如图所示 不管是代理操作还是真实的操作,其共同的目的就是上网,所以用户关心的只是上网,至于具体是如何操作的用户并不关心,

2017-09-20 18:07:15 271

原创 设计模式之工厂设计

工厂设计是Java开发中使用最多的一种设计模式,那么什么叫工厂设计? 工厂设计有哪些作用呢?请先观察以下程序中interface Fruit{ // 定义一个水果接口 public void eat() ; // 吃水果}class Apple implements Fruit{ public void eat(){ System.out.println(

2017-09-20 13:39:43 291

ACM算法大神讲解常用数据结构与算法优化(java版与c++版)

基本上一流的互联网公司面试都必考数据结构与算法,此资源不仅介绍了基本的数据结构与算法,更是把优化思想讲解的淋漓尽致,是你巩固基础和进阶的不二之选!

2017-08-26

空空如也

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

TA关注的人

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