设计模式
设计模式的讲解和示例
云聪
喜欢简洁的抽象,也着迷神奇的细节,我担心自己因为过于偏向抽象而变得肤浅,也害怕自己因为太过深入细节而迷失,这让我很痛苦,但是我不会放弃挣扎,因为我相信挣扎的过程就是成长。
展开
-
HttpClient4.3.6源码阅读 RequestConfig.Builder(Builder模式实践)
Builder(org.apache.http.client.config.RequestConfig.Builder) 是RequestConfig(org.apache.http.client.config.RequestConfig) 的内部类,专门用于创建RequestConfig。我经常这样创建RequestConfig: RequestConfig requestCon原创 2017-01-15 10:18:38 · 4601 阅读 · 0 评论 -
策略模式
策略模式定义了算法族,这些算法被分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 这是《深入浅出设计模式》对策略模式的定义,这个定义说得很准确,但是书中的示例却举得不好,让我对策略模式的理解总是“一会儿感觉理解了,一会儿感觉没有理解”。直到看了《Effective Java》第二版第21条,用函数对象表示策略,才终于只是处于“感觉理解了”的状态了。根据自己的理解,写了原创 2016-06-18 14:01:33 · 2442 阅读 · 0 评论 -
LeetCode341 Flatten Nested List Iterator(迭代器模式实践) Java
题目: Given a nested list of integers, implement an iterator to flatten it.Each element is either an integer, or a list – whose elements may also be integers or other lists.Example 1: Given the list [[原创 2016-04-20 20:00:17 · 5610 阅读 · 0 评论 -
我组织类时无意间遵守了依赖倒置原则
我每次开始写一个小项目的时候,都想把项目中的那些类组织得优雅一些,但最后的代码总是一团糟,这让我很痛苦。我把希望寄托于设计模式,希望它能帮我解脱。遗憾的是,从接触设计模式到现在,已经快三年了,我的代码就只出现过单例模式。不过,从今天开始,一切都不一样了,我的代码里多了依赖倒置原则。原创 2016-01-09 23:34:49 · 1235 阅读 · 5 评论 -
Heritrix3.3.0源码阅读 种子模块(观察者模式实践)
种子模块从外部加载种子,并把种子发布给所有需要种子的对象。我们将会看到,这个模块是以观察者模式的形式实现的。本文不会讲到种子的具体加载过程,也不会讲到种子的消费过程,而只会讲种子模块本身,也就是该模块各个类的具体实现及组织方式。让我们开始吧。 “种子模块”是该模块一个抽象类的名称,其它具体类都必须继承它。该类源码如下: package org.archive.modules.seeds; i原创 2015-11-18 13:13:29 · 965 阅读 · 0 评论 -
代理模式和JDK动态代理
1.代理模式 在代理模式中,接活的就是代理,实际干事儿的就是被代理的对象,也就是说,接活的和干活的不是同一个对象。 这里举经典的火车站和火车票代售点为例来说明。 package testproxy; public interface SellTicket { public void sellTicket(); }SellTicket接口只有一个卖票的方法,凡是实现了该接口的类,都有卖票的原创 2015-07-28 23:03:45 · 811 阅读 · 1 评论 -
Java 线程安全的单例模式实现方式(一)及解释
单例模式确保一个类只有一个实例,并提供一个全局访问点。 Java源代码: public class Singleton { private static Singleton uniqueInstance = new Singleton(); private Singleton() {} public static Singleton getInstance() { retur原创 2015-06-20 10:38:52 · 1087 阅读 · 0 评论 -
模板方法模式
模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。(该定义来源于《深入浅出设计模式》) 下面举一个该模式的例子。该例子先抽象了某个人一天的生活:起床,上课,如果不打球就背单词,睡觉,接着又具体秒速了星期一和星期二的生活。具体的实现代码如下: package templatemethod; /** * 该类原创 2015-05-30 14:44:03 · 969 阅读 · 3 评论