09 2016 档案

摘要:之前我们实现了迭代器模式,很多编程语言实际上已经内置了迭代器类,比如Java就为我们实现了迭代器Iterator。我们首先来看Iterator中的源码。 通过JDK源码我们发现Iterator是一个接口,包含三个方法:hasNext、next、remove。 Iterator是一个接口,那如何来创建 阅读全文
posted @ 2016-09-30 00:45 OKevin 阅读(1082) 评论(0) 推荐(0) 编辑
摘要:今天要说的迭代器模式,实际上就是Java已经为我们实现好了,那就是Java的Iterator类。包括很多编程语言也有自己的迭代器类,但同时它也是一个设计模式,所以在我们实现迭代器模式的时候实际上就是在实现一个迭代器类。 我们先来了解何为迭代器?其实你把它简单理解为for循环也没什么问题,可以说是它是 阅读全文
posted @ 2016-09-29 00:35 OKevin 阅读(318) 评论(0) 推荐(0) 编辑
摘要:备忘录模式,望文生义就知道它是用来做备忘的,或者可以直接说是“备份”。当需要保存当前状态,以便在不久要恢复此状态时,就可以使用“备忘录模式”。将当前”状态“备份,是不是又new一个类,然后将每个字段方法copy过去就可以了呢?或者说使用我们之前clone方法做深复制浅复制呢?其实不然,在《大话设计模 阅读全文
posted @ 2016-09-27 23:44 OKevin 阅读(300) 评论(0) 推荐(0) 编辑
摘要:适配器模式其实很简单,或者说学了设计模式到现在,虽然每次看到各种名字的设计模式就觉得很高端,但当真正了解过后才知道其实也没有那么玄乎,有的东西在我们平时的时候都已经用到过了。比如这次我们要说的适配器模式,说白了,就是以前的代码接口,和我们客户端需要调用的接口不一致,但以前代码功能又是我们想要的功能。 阅读全文
posted @ 2016-09-26 23:33 OKevin 阅读(421) 评论(0) 推荐(0) 编辑
摘要:今天要说的设计模式——状态模式,个人觉得非常有意思,因为此种设计模式的运用场景几乎可以说是每个程序里都可以用上。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。定义一般来说都是晦涩难懂的。我们同样来通俗一点解释,首先解释这种模式的运用场景,这种模式一般用在有大量if-else 阅读全文
posted @ 2016-09-26 00:07 OKevin 阅读(259) 评论(0) 推荐(0) 编辑
摘要:外观模式又称为门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。我们还是用通俗的语言来解释这句话的意思。当你需要实现某个功能,而实现这个功能需要调用N多接口,N多的类,这个时候实际上会使得你的代码变得耦合度非常大,怎么办呢?我们可以将这一 阅读全文
posted @ 2016-09-25 00:51 OKevin 阅读(328) 评论(0) 推荐(0) 编辑
摘要:我们思考这么一种场景,课堂上老师在黑板即兴出几道题,学生在下面在手抄黑板上的题目,这个时候前面的同学可能能抄对题目,但后面的同学可能因为太远看不清老师写的字,或者说老师写错了一个数据要修改的时候,所有学生都要跟着改一遍。连题目都抄错的同学,怎么可能做对题呢?不是同样的标准,怎么评判学生的成绩呢? 但 阅读全文
posted @ 2016-09-24 00:39 OKevin 阅读(1317) 评论(0) 推荐(1) 编辑
摘要:之所以将线程上下文类加载器(Thread Context ClassLoader)单独拿出来写,确实是因为它涉及的东西比较多,既然带有线程两个字,一定也是非常重要的一个东西。 我们首先来回顾一下类加载器的双亲委派模型。 在上一章《虚拟机类加载机制(2)——类加载器》中我们解释了何为类加载器的“双亲委 阅读全文
posted @ 2016-09-22 23:57 OKevin 阅读(4130) 评论(1) 推荐(2) 编辑
摘要:策略模式,需要我们结合简单工厂模式,更高级地用法可能需要我们掌握Java反射机制。简单工厂模式我们在最早的时候介绍,我们也谈到了一点Java的反射机制。借着学习策略模式的机会,我们顺便复习一下简单工厂模式和反射。 先说说何为策略模式。“策略”我的理解是,对一件事,有不同的方法去做,至于用何种方法取决 阅读全文
posted @ 2016-09-21 00:20 OKevin 阅读(3254) 评论(1) 推荐(1) 编辑
摘要:《深入理解Java虚拟机》一书中将类的加载过程放到了类加载器前面一节,但在这里我想先讲“类加载器”。在上一篇类加载时机中我们用大量篇幅来讲解了类加载过程中的5个步骤的最后一步——初始化。在这一节中,我们实际是在讲解类加载过程5个步骤的第一步——加载。 我们再次回顾类加载过程的5个步骤: 类加载过程的 阅读全文
posted @ 2016-09-19 23:53 OKevin 阅读(873) 评论(0) 推荐(0) 编辑
摘要:由于道行不够深,所以此篇类加载机制的讲解主要来自于《深入理解Java虚拟机——JVM高级特性与最佳实践》的第7章 虚拟机类加载机制。 在前面《初识Java反射》中我们在开头提到要了解Java反射,就得要了解虚拟机的类加载机制。在这里,我们来试着窥探一下何为类加载。 “虚拟机把描述类的数据从Class 阅读全文
posted @ 2016-09-19 00:56 OKevin 阅读(2381) 评论(0) 推荐(0) 编辑
摘要:很早以前就知道JUnit也知道它用来做单元测试。今天突然又想到还是要学一下这个JUnit,不然说出去不知道怎么用JUnit做单元测试……作为一个程序员怪丢人的。第一篇JUnit不算是一个总结性的文章,只算是第一次摸索着学习JUint怎么来用。到目前来看,确实可能和网上说的一样,不过是多了几个main 阅读全文
posted @ 2016-09-18 23:48 OKevin 阅读(837) 评论(0) 推荐(0) 编辑
摘要:原型模式涉及一个浅复制和深复制的概念。原型模式可以简单理解为“复制”,但这个复制不是代码的复制。对同一个类,我们可以实例化new三次来“复制”,但如果在初始化的时候构造函数的执行很长,多次实例化就显得效率很低效了。那我们能否只实例化一次,然后“复制”呢? 这样写吗?注意这是引用的复制,这实际上还是只 阅读全文
posted @ 2016-09-17 22:06 OKevin 阅读(5143) 评论(0) 推荐(0) 编辑
摘要:要详细的了解Java反射,就得要了解Java的类加载以及何为运行时动态加载等等概念。本文抛开其余概念,简单介绍Java反射,详细介绍会在以后有一个系统而全面的认识过后展开。 反射是Java被视为动态语言的关键,它允许程序在运行时取得任何类的内部信息。Java的这个能力或许在Web应用中用得不是很多, 阅读全文
posted @ 2016-09-17 12:46 OKevin 阅读(479) 评论(0) 推荐(0) 编辑
摘要:对于建造者模式,我们首先来说明建造者模式是用来干嘛的。建造模式一般用于创建复杂对象,这些复杂对象的构建过程是稳定的,但是内部的构件通常要面临比较复杂的变化。怎么来解释呢?我们利用《大话设计模式》中的例子来解释,创建一个胖子和一个瘦子,我们需要画出头、手、脚、身体这几个部分,最没水平的写法是写两个类, 阅读全文
posted @ 2016-09-16 23:22 OKevin 阅读(485) 评论(0) 推荐(0) 编辑
摘要:前两篇我们自己首先实现了一个观察者模式,我们再利用Java自带的接口和类实现了观察者模式,但其实两种观察者模式存在不足的地方。之前两种观察者模式的观察者(订阅者)都是实现了一个同一个接口,实现了接口中的update方法,但是如果两个观察者风马牛不相及,完全无关呢?或者他们的方法名不一样这个时候该怎么 阅读全文
posted @ 2016-09-16 16:10 OKevin 阅读(1629) 评论(3) 推荐(0) 编辑
摘要:对于观察者模式,其实Java已经为我们提供了已有的接口和类。对于订阅者(Subscribe,观察者)Java为我们提供了一个接口,JDK源码如下: 和我们上一篇实现的观察者一样,仅提供一个update方法用于接收通知者的通知做出相应改变。 我们再来看看Java为我们提供了一个怎样的通知者(Publi 阅读全文
posted @ 2016-09-15 00:06 OKevin 阅读(22855) 评论(0) 推荐(0) 编辑
摘要:订阅者模式通常也成为发布-订阅模式,发布者也称为通知者,订阅者也称为观察者。通知者发出通知,各发布者则收到通知后做出相应的动作。由于存在不同的订阅者和通知者,所以将这两者抽象出来。 其实Subject和Observer是抽象类还是接口,这个是比较灵活的,取决于你的应用场景是怎样,总之就是要将它们抽象 阅读全文
posted @ 2016-09-14 00:20 OKevin 阅读(1018) 评论(0) 推荐(0) 编辑
摘要:今天和同事聊起了单例模式的线程安全,我说如果不做任何措施,单例模式在多线程下是不安全的,得到的“单例”实际上并不是单例。但是为什么不是单例呢?由此我上网查了一下,在使用单例模式时,一定要注意线程安全问题,之前的写法没有任何问题。如下: 问题就在于,synchronized对整个方法加锁,形成同步机制 阅读全文
posted @ 2016-09-13 00:03 OKevin 阅读(15152) 评论(1) 推荐(0) 编辑
摘要:在之前有接触过组合模式,那是第一次接触设计模式,觉得什么是组合模式啊?什么部分与整体。现在再来看组合模式,觉得实际上并没有那么神秘。 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。这句话什么意思呢?凡是能类似树形结构的场景,均可使 阅读全文
posted @ 2016-09-11 23:05 OKevin 阅读(816) 评论(0) 推荐(0) 编辑
摘要:这里对mybatis的入门介绍以官方最新MyBatis3.4.1为准,具体文档及jar包请访问:https://github.com/mybatis/mybatis-3/releases。 以前经常都在使用mybatis,但通常都是和Spring结合起来用,在配置的时候往往都是在网上或者东配置西配置 阅读全文
posted @ 2016-09-11 17:56 OKevin 阅读(1667) 评论(1) 推荐(0) 编辑
摘要:代理模式,在UML类结构上很好理解, 不过在实际应用当中可能并不是很清楚代理模式应用在哪些场景里。这里给出《大话设计模式》中对代理模式应用场合的解释: 第一,远程代理,也就是为一个对象在不同地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。 第二,虚拟代理,是根据需要创建开销很大的 阅读全文
posted @ 2016-09-11 15:58 OKevin 阅读(568) 评论(0) 推荐(0) 编辑
摘要:这里只简单说说装饰模式,因为对这个模式理解得还不是很透彻。暂时不能写出更深一点的内容。 什么是装饰模式呢?拟定一个场景,一个人需要穿衣打扮,我们可以写一个Person类,为它定义出N个方法,穿短袖,穿皮鞋,等等。要新增一个装饰的时候,我们在Person类里新增一个方法即可,但这违背了“方法-封闭”原 阅读全文
posted @ 2016-09-10 00:36 OKevin 阅读(488) 评论(0) 推荐(0) 编辑
摘要:单例模式,顾名思义,在程序运行时有且仅有一个实例存在。最常见的一个应用场景就是网站访问量的计数器,试想如果允许创建多个实例,那还怎么计数,这个时候就得创建有且仅有的一个实例了。如何防止程序创建多个实例呢?首先就是不能直接new。不能new那就是要将构造函数实例化,那怎么来创建实例呢?我们还是从代码着 阅读全文
posted @ 2016-09-09 00:07 OKevin 阅读(1911) 评论(0) 推荐(0) 编辑
摘要:前面我们讲了三个工厂模式,都是万变不离其宗,利用工厂模式来实例化不同的对象,虽然可能会多写一些代码,但这会为程序系统带来更方便的扩展性和尽量小的修改。 我们来从头回顾一下为什么要用工厂模式,实现一个计算器的程序,初级程序员可能立马分分钟就能写出代码来,例如: 几乎是20行的代码就实现了需求,但“合适 阅读全文
posted @ 2016-09-07 23:53 OKevin 阅读(551) 评论(1) 推荐(1) 编辑
摘要:这里又出现了一个抽象工厂模式,这个抽象工厂模式又是什么呢? 我们现在来模拟一个场景,现在用的是Mysql数据库,明天让你更换为Oracle数据库。此时,想想要做多少的改动。但我们如果用工厂模式,这会让你节省大量时间。 首先,我们用工厂方法模式来设计这个程序。 我们画出类的UML图。 IFactory 阅读全文
posted @ 2016-09-07 00:17 OKevin 阅读(5900) 评论(0) 推荐(1) 编辑
摘要:今天在读《Java网络编程》这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方。这个地方有点细节,不过就应该把这种细节把握住。 情况是这样的,讲到InputStream的抽象方法read时,说到read返回一个int型,但实际是一个byte型的数据。这点从API 阅读全文
posted @ 2016-09-05 23:50 OKevin 阅读(58168) 评论(2) 推荐(1) 编辑
摘要:工厂方法模式,咋一看在这个计算器程序里好像反而使程序变得更加“复制”,确实代码量好像是增加了,到底有什么好处呢?我想多领会领会,必然有它存在的理由。 我们先来看看“简单工厂模式”和“工厂方法模式”的类继承关系。上篇提到的“简单工厂模式”的类继承关系如下图所示: “工厂方法模式”的类继承关系如下图所示 阅读全文
posted @ 2016-09-05 23:33 OKevin 阅读(658) 评论(0) 推荐(0) 编辑
摘要:工厂模式分三类:简单工厂模式、工厂方法模式、抽象工厂模式。 首先介绍比较简单一种工厂模式——简单工厂模式。 我们以计算器作为一个例子来说明工厂模式到底是什么。作为一个几年前大一从C语言起步的初级程序员,到现在写代码的思维还是停留在结构化编程,虽然Java学了有几年了,总是说面向对象面向对象。但是让实 阅读全文
posted @ 2016-09-04 23:29 OKevin 阅读(1035) 评论(1) 推荐(2) 编辑

点击右上角即可分享
微信分享提示