摘要:多线程设计模式:1.Single Threaded Execution Pattern[同一时刻只允许一个线程操作] 比喻:三个挑水的和尚,只能同一时间一个人过桥,不然都掉河里喂鱼了。 总结:在多个线程同时要访问的方法上加上synchronized关键字。2.Immutable Pattern[变量...
阅读全文
随笔分类 - 设计模式
摘要:接上一篇《多线程设计模式总结(一)》,这篇博客再介绍5个多线程设计模式7)Thread-Per-Message实现某个方法时创建新线程去完成任务,而不是在本方法里完成任务,这样可提高响应性,因为有些任务比较耗时。示例程序:12345678910public class Host { private ...
阅读全文
摘要:并发程序的编程与设计是一个难点,也是程序员必须掌握的一个点。工作之后写的第一个软件里面也有并发编程,当时在设计并发这块感觉好复杂,最后的实现感觉也有点乱。当时就想好好学习一下并发编程的设计,但是一直没有时间。今年看了两本并发编程相关的书,《多线程设计模式》和《Java并发编程与实战》。本想着和设计模...
阅读全文
摘要:Template Methodis abehavioral design patternand it’s used to create a method stub and deferring some of the steps of implementation to the subclasses.Template methoddefines the steps to execute an algorithm and it can provide default implementation that might be common for all or some of the subclas
阅读全文
摘要:Avoid coupling the sender of a request to the receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.The main intention in Chain Of Responsibility is to decouple the origin of the request and
阅读全文
摘要:设计模式之状态模式这篇文章是关于状态模式的,它是一种行为设计模式。你不需要太多理论知识就能理解这个模式的主旨。这篇文章分成几个部分,我会列出状态模式适用于哪些情况,它的优缺点都是什么,还有一些使用的例子。有的时候当一个对象的内部状态发生改变的时候,你需要改变这个对象的行为。状态模式就是用来干这个的。你也可以创建不同的类来代表不同的状态和功能。当然这些类得继承一个抽象类或者实现一个接口。使用状态模式,我们可以通过在在运行时传递给对象不同的状态子类,来改变对象的状态。这是把双刃剑,好处是我们清晰的剥离出了不同的状态子类,坏处是类的数量开始膨胀。我们来看下这个例子。每年有四个季节,春夏秋冬。每个季节
阅读全文
摘要:设计模式:装饰者模式装饰者模式是不太常用的一种设计模式。我不太明白为什么它没能流行起来,虽然它用起来很方便。装饰者模式让你能够在可控的范围内往一个对象添加功能。这个在运行时也是靠谱的,甚至在静态类型的语言里也是如此。装饰者模式可以当作子类的一个替代品。子类化在编译期的时候添加新的特性,这个改动影响到原始类的所有实例;装饰者模式能在运行时给指定的对象提供新的行为。它是坚持开闭原则的一个很好的工具。下面的一些例子将让它看到这种模式的魅力:示例1:HTTP认证假设这里有个HTTP客户端 ,它访问的是一个RESTful的服务。服务有一部分是能直接访问的,有一些则需要用户进行登录。当客户端试图访问一个受
阅读全文
摘要:有的时候我们需要拦截方法的调用,来执行我们自己的逻辑。如果你不是Java EE CDI规范的拥趸,也不想使用类似aspectj的AOP框架,你还可以用别的简单有效的方式。JDK1.5引入了java.lang.reflect.Proxy,你可以通过它给一个指定的接口创建动态代理。程序每次调用动态代理类的时候,都会调用到代理类的InvocationHandler。因此在框架或者库的代码执行之前,你可以动态控制应该执行什么代码。另外一个JDK代理的实现是字节码框架,比如javassist或者cglib,它们都提供了类似的功能。你可以通过子类来决定你应该调用父类的哪个方法,或者你想要拦截哪个方法。这当
阅读全文
摘要:责任链模式,用我的理解就是动作的处理链表。根据请求的不同类型,在链表查找相应类型的处理者。处理者是一个链表。wiki上说明wikipedia的定义为:CoR patternconsists of a source of command objects and a series of processing objects. Each processing object contains a set of logic that describes the types of command objects that it can handle, and how to pass off those t
阅读全文
摘要:目录(?)[-]Future PatternTwo-Phase Termination PatternThread-Specific Storage PatternActive Object PatternFuture Pattern 在Thread-Per-Message Pattern中,我们研究过“收到每个请求建立一个线程”的做法,但这样的请求是不要求有返回值的。如果当需要返回值,但由于后台处理需要很久,返回值 不能马上获取,那么就可以使用 Future Pattern。Future Pattern同样会每个请求建立一个线程处理,同时会马上返回一个对象,但该对象并不是真正的返回值,真..
阅读全文
摘要:目录(?)[-]Read-Wirte Lock PatternThread-Per-Message PatternWorker Thread PatternRead-Wirte Lock Pattern Read-Write Lock Pattern 将读取和写入分开来处理。在读取数据之前,必...
阅读全文
摘要:目录(?)[-]Guarded Suspension PatternBalking Pattern Producer-Consumer Pattern Guarded Suspension Pattern 该模式描述的是当一个线程在执行某个操作时,但由于其他资源还没有准备好,需要等待,那么就等待资源准备好才开始自己的操作。我们直接看代码例子:[java] view plaincopypublicclassRequest{privateStringname;publicRequest(Stringname){this.name=name;}publicStringgetName(){retur.
阅读全文
摘要:目录(?)[-]Java多线程基础Thread类的run方法和start方法线程的启动线程的暂时停在线程的共享互斥线程的协调Single Threaded Execution PatternJava多线程基础Thread类的run方法和start方法 Java语言写成的程序一定是先从主线程开始操作,所以必须在程序的某个位置启动新的线程,才能算是真正的多线程程序。start()方法是 Thread类的方法,调用start()方法,就会启动新的线程。请注意,被调用来启动线程的是start()方法,而非run()方法。调用 start()方法之后,Java执行处理系统会在背后启动新的线程。再由这..
阅读全文
摘要:注:本文的主要参考资料为结城浩所著《JAVA多线程设计模式》。单线程执行模式(Single Threaded Execution Pattern)是最简单的多线程设计模式,几乎所有其他的模式都在不同程度上应用了该模式。先看一个程序,通过它可以体验多线程程序无法正确执行的场景,这里所写的是个关于“只能单个通过的门”的程序:有三个人频繁地、反复地经过一个只能容许单人经过的门,当人通过门的时候,这个程序显示出通过人的“姓名”与“出生地”,其代码如下:Java代码publicclassGate{privateintcounter=0;privateStringname="Nobody&quo
阅读全文
摘要:这个专题主要讨论并发编程的问题,所有的讨论都是基于JAVA语言的(因其独特的内存模型以及原生对多线程的支持能力),不过本文传达的是一种分析的思路,任何有经验的朋友都能很轻松地将其扩展到任何一门语言。注:本文的主要参考资料为结城浩所著《JAVA多线程设计模式》。线程的英文名Thread,原意指“细丝”。在多线程程序中,若要追踪各个线程的轨迹,就会派生出一系列错综复杂的乱线团。假设在运行过程中,如果有人问到“请问现在执行到代码的哪一部分了?”,你需要多个手指头才能指出正确的地方。当应用程序的规模、复杂程度达到一定程度时,并发设计是一个必将考虑到的问题,以下是一些常见的应用:GUI:以word为例,
阅读全文
摘要:转载http://blog.csdn.net/zhengzhb/article/category/926691java的动态绑定 所谓的动态绑定就是指程执行期间(而不是在编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。java继承体系中的覆盖就是动态绑定的,看一下如下的代码:[java]view plaincopyclassFather{publicvoidmethod(){System.out.println("ThisisFather'smethod");}}classSon1extendsFather{publicvoidmethod()
阅读全文
摘要:转载http://blog.csdn.net/lin_bei/article/details/1067506我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用--在Java/IO库里面的应用,<<Java与模式>>这本书也不例外,有点不一样的是,这本书在介绍的时候有个专题,是从两个模式来看Java/IO库,完这个专题后,个人感觉对Java/IO库有了全新的认识同时也加深了Decorator模式跟Adapter适配器模式的理解,现和大家分享下这个在我看来很伟大的成果,同时说明下,以下大部分文字跟图片是来自<<Java与模式>
阅读全文
摘要:转载http://blog.csdn.net/hust_is_lcd/article/details/7884320[-] 认识装饰器模式 装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式是通过...
阅读全文
摘要:java中io包运用到了装饰器模式,下面是java中io的类结构图:无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充。它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个源(称为流源或Source of Stream)出来,到某个目的地(称为流汇或Sink of Stream)去的。由流的方向,可以分成输入流和输出流,一个程序从输入流读取数据向输出流写数据。 如,一个程序可以用FileInputStream类从一个磁盘文件读取数据,如下图所示: 像FileInputStream这样的处理器叫做流.
阅读全文
摘要:Spring的AOP是建立在Java的动态代理的基础上的,学习Java动态代理机制有助于循序渐进地理解AOP的思想。 传统的日志输出方法是在每一个业务逻辑方法里编写记录日志的代码,这样,程序中就会有很多类似的日志输出代码,造成了很大的耦合。那么,使用什么方法可以使业务逻辑和输出日志的代码分离,并实现日志信息代码的重用呢?Java的代理机制可以改善这个问题。 首先编写一个日志信息的代理类,这个类实现了接口InvocationHandler,然后编写一个接口,并实现这个接口,在实现类中编写具体的逻辑代码,最后针对接口编写测试类,查看测试结果。具体步骤如下: (1)编写一个日志信息的代理类LogPr
阅读全文