打赏

随笔分类 -  design pattern of java

摘要:在学完volatile和CAS之后,近几天在撸AbstractQueuedSynchronizer(AQS)的源代码,很多并发工具都是基于AQS来实现的,这也是并发专家Doug Lea的初衷,通过写一个这样的基础工具来提高j.u.c的灵活性。具体可以看这篇论文的一段原文,我摘录一下: As is w 阅读全文
posted @ 2018-07-22 14:41 lingjiango 阅读(2138) 评论(0) 推荐(3) 编辑
摘要:有这样一个应用场景,对于传入后台的Request和返回页面的Response信息,如果页面的Request带有敏感信息或危险字符串,就会对系统造成影响,所以我们会写过滤器(Filter)处理Request,不同的信息处理会有不同的处理方式,如果我们只用一个Filter来处理所有的信息,扩展性就不够强,所以会针对不同的信息处理写不同的Filter,然后把Filter放在一个FilterChain中,以实现信息处理的“热拔插”,这样一个FilterChain就像一条职责链,链上的每个节点处理不同的功能,同时对于Response我们希望能以Resuest处理的倒序进行返回处理,以达到完全过滤敏感.. 阅读全文
posted @ 2013-06-02 00:32 lingjiango 阅读(6328) 评论(2) 推荐(1) 编辑
摘要:举个例子,有一个对象Car,其有一个方法run(),现在我们需要知道车子跑了多久,OK,我们首先可能会想到使用继承来监听此方法,就知道车子跑了多久了。1 package com.learn.www;2 3 public interface Runable {4 void run();5 } 1 package com.learn.www; 2 3 import java.util.Random; 4 5 public class Car implements Runable { 6 7 @Override 8 public void run() { 9 ... 阅读全文
posted @ 2013-05-28 21:15 lingjiango 阅读(843) 评论(1) 推荐(0) 编辑
摘要:观察者模式定义了一种一对多的依赖关系,让多个观察者同时监听一个被观察者,当被观察者发生变化,所有的观察者就做出及时的响应。GUI中的按钮(Button)的事件监听模式就是一个Observer模式的实现,现在我们通过模拟这个事件来理解Observer. 对于Button的图形界面的事件,我们就通过在测试类模拟,而不模拟图形实现。 1 interface Observerable { 2 public void addActionListener(ActionListener a); 3 public void pressed(); 4 } 5 6 class Button i... 阅读全文
posted @ 2013-04-20 22:12 lingjiango 阅读(1297) 评论(2) 推荐(1) 编辑
摘要:前两篇阐述了FactoryMethod和AbstractFactory的实现以及类结构图,但是正如大家所知道的那样,没有任何事情是完美的,这两种设计模式也有自己的优缺点,而Spring对两种工厂模式取长补短,很好的解决了关于生产的产品维度以及产品系列维度问题。三、FactoryMethod与AbstractFactory对比 FactoryMethod与AbstractFactory对比: FactoryMethod主要是生产产品,为产品维度,缺点是生产产品系列时,易导致工厂泛滥。AbstractFactory主要是产品系列,为产品系列维度,缺点是生产产品品种时,工厂改动比较大,不灵活。四.. 阅读全文
posted @ 2013-04-14 23:13 lingjiango 阅读(432) 评论(0) 推荐(1) 编辑
摘要:上篇的FactoryMethod阐述的是生产不同的交通工具的工厂,要么让老张单独的开车去,要么让他单独的开飞机去,但是呢,这样老张不是很孤独寂寞去东北吗?一点娱乐的气息都木有,OK,现在我们酝酿一个这样的场景,让老张开着车,叼着苹果,扛着AK47去东北,这样老张就不无聊了,车、苹果、AK47,这是一个系列的产品,而AbstractFactory就是解决系列产品生产问题。二、AbstractFactory AbstractFactory模式 除了生产正常世界的系列产品,我们还可以生产魔法世界的系列产品(扫帚、魔法棒等),其实我们用的QQ或者酷我音乐盒等所用的皮肤更换功能,都是AbstractF. 阅读全文
posted @ 2013-04-14 22:22 lingjiango 阅读(419) 评论(0) 推荐(0) 编辑
摘要:“老张开车去东北 撞了 肇事司机耍流氓 跑了 多亏一个东北人 送到医院缝五针 好了 ……翠花,上酸菜” “老张开车去东北”,OK,这里如果我们刻意的用OO思想来看的话,老张这次是开车去的,下次就有很可能开飞机去的……这里请允许我刻意的这样的思考这个问题,因为刻意的这样思考,我们可以从这句话发现两个蕴含的设计模式,一个是FactoryMethod,一个是AbstractFactory。一、FactoryMethod FactoryMethod模式 OK,回到这句歌词,正如上面所说的,这次开车,下次开飞机……所以我们要思考出一种不管是车还是飞机或者火车,我们的程序都能灵活的适应需求的变化,这里就. 阅读全文
posted @ 2013-04-14 22:09 lingjiango 阅读(975) 评论(0) 推荐(0) 编辑
摘要:之所以说是浅析单例模式是因为其实单例模式有很多种实现的写法,比如lazy initialization思想带来同步锁的实现方式纠结起细节来就可以写出很多种,这里我主要说一种实现的方式,也是最简单的—静态成员直接初始化的方式。 为什么会产生单例这个设计模式?主要是,如果我们在开发的过程中,每个实例都新建一个的话,会产生很多的内存开销,这对JVM不是什么好事,除此以外,如果很多实例,当这些实例不需要了,JVM去回收又是一件麻烦事,所以对于一些实例,如果确定可以共享,就不如一起共享一个,节省内存,提高性能。 1 /** 2 * 3 * @author LingJian 4 * 5 *... 阅读全文
posted @ 2013-04-13 22:18 lingjiango 阅读(1219) 评论(0) 推荐(0) 编辑
摘要:Iterator模式提供一系列的方法用于遍历某一类聚合对象的各个元素,在此,通过模拟容器的迭代器来学习Iterator模式。 首先,模拟实现JAVA中用得最多的ArrayList和LinkedList,当然这2类容器都是实现Collection接口的,为什么要实现Collection接口?最根本的原因肯定是多态。 1 /** 2 * 3 * @author LingJian 4 * 5 */ 6 public class ArrayList implements Collection { 7 private Object[] objects = new Object[1... 阅读全文
posted @ 2013-04-08 23:51 lingjiango 阅读(1506) 评论(2) 推荐(3) 编辑
摘要:有了OO的基础后,开始认真学习设计模式。首先学习的是Strategy,下面就封装商场打折策略来分析下策略模式是怎样一回事。商场每逢节假日都会对不同的商品采用不同的打折策略,首先卖苹果的说我的苹果要打折,好的,我们建立Market和Apple类。 1 /** 2 * 3 * @author LingJian 4 * 5 */ 6 public class Market { 7 8 /** 9 * 只对Apple10 * @param apple11 */12 public static void normalSell(Apple appl... 阅读全文
posted @ 2013-03-31 18:19 lingjiango 阅读(3350) 评论(0) 推荐(1) 编辑
摘要:最近在自学设计,碰到一题目,我相信网上很多地方也能找到这个题目,题目内容如下:农场一头小母牛每年生头小母牛母牛五岁产母牛二十年上多少牛请使用OO思想来解决这个问题。这题目很有意思,为什么呢?因为读起来朗朗上口,很顺溜,哈哈,开个玩笑。OK,下面我将结合所学的知识和技巧来描述下自己解决这个问题的过程。名词 从题目内容中,我们可以抽取出多个名词,如农场、母牛等,为什么我们要把名词抽取出来?因为在OO思想中,就是要有类或者对象,而抽取出来的名词就有可能是我们需要的类或者对象,当然也有可能是类的属性,这个我们就需要结合具体的情况来分析。通过名词抽取,我确定我需要两个类,分别是农场和母牛,我命名为Fa. 阅读全文
posted @ 2013-03-24 01:13 lingjiango 阅读(2160) 评论(4) 推荐(1) 编辑