设计模式
杨斌_HUST
Greatness can be prepared.
展开
-
Java并发编程 生产者消费者模式
这是java开发时常用到的模式,可以使程序在设计时分开生产者和消费者之间的相互调用。 模式中需要建立三个对象:生产者 消费者 仓库生产者:把生产出来的产品放到仓库总消费者:从仓库中取出产品进行消费仓库:采用同步方法,对仓库上锁同步,每次只能有一个对象对其进行操作类图如下:类图如下: 仓库类代码:使用队列的方式实现package consume转载 2013-12-30 13:00:08 · 264 阅读 · 0 评论 -
Java设计模式-Facade(外观)
在许多开源的框架中都充分的利用了设计模式这一概念,Struts典型的MVC模式的化身,Spring是工厂模式和单例模式的充分体现。在项目开发中,能充分利用设计模式的思想来考虑问题,来解决问题,来通过代码去实现。不但可以提高代码的质量,对程序的扩展,重用带来很大方便。其实我们项目中用设计模式编程就是加了一个封装层,减少客户必须处理的对象的数量。 在设计模式中一般都遵循这样的原则:转载 2014-01-07 13:21:49 · 436 阅读 · 0 评论 -
JAVA设计模式-Chain of Responsibility(职责链)
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的藕合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 1.当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它。 2.接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一转载 2014-01-07 23:23:29 · 273 阅读 · 0 评论 -
JAVA设计模式- Command (命令)
命令模式有以下角色来组成 1) 命令角色(Command):声明执行操作的接口。有java接口或者抽象类来实现。2) 具体命令角色(Concrete Command):将一个接收者对象绑定于一个动作;调用接收者相应的操作,以实现命令角色声明的执行操作的接口。3) 客户角色(Client):创建一个具体命令对象(并可以设定它的接收者)。4) 请求者角色转载 2014-01-07 23:34:04 · 297 阅读 · 0 评论 -
JAVA设计模式- Iterator (迭代器)
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。类型:行为类模式类图: 如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧: public static void print(Collection coll){ Iterator it = coll.iterator转载 2014-01-07 23:40:00 · 205 阅读 · 0 评论 -
JAVA设计模式-Mediator (中介者)
GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。当然并不是所有的对象都需要加入“中介”对象。如果对象之间的关系原本一目了然,中介对象的加入便是“画蛇添足”。中介转载 2014-01-07 23:44:51 · 269 阅读 · 0 评论 -
JAVA设计模式-Memento (备忘录)
转载一个备忘录模式的实现方法一、定义:备忘录(memento)模式又叫快照(snapshot)模式或者token模式,主要功能:备忘录模式是用一个对象来存储另外一个对象的内部状态的快照,实现备忘录模式的关键点是在不破坏封装的情况下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在合适的时候,把这个对象还原。说明:备忘录模式适模式中比较好理解的一个,这里就不举例子,但是备忘录模转载 2014-01-07 23:47:46 · 192 阅读 · 0 评论 -
JAVA设计模式-Observer (观察者 )
1.概念 observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被转载 2014-01-07 23:51:12 · 233 阅读 · 0 评论 -
JAVA设计模式-Visitor (访问者)
Visitor访问者模式定义作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作.在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作的行为.为何使用Visitor?Java的Collection(包括Vector和Hashtable)是我们最经常使用的技术,可是Collection好象转载 2014-01-08 13:24:07 · 191 阅读 · 0 评论 -
JAVA设计模式-Strategy (策略 )
今天你的leader兴致冲冲地找到你,希望你可以帮他一个小忙,他现在急着要去开会。要帮什么忙呢?你很好奇。他对你说,当前你们项目的数据库中有一张用户信息表,里面存放了很用户的数据,现在需要完成一个选择性查询用户信息的功能。他说会传递给你一个包含许多用户名的数组,你需要根据这些用户名把他们相应的数据都给查出来。这个功能很简单的嘛,你爽快地答应了。由于你们项目使用的是MySQL数据库,你很快地转载 2014-01-08 13:16:49 · 271 阅读 · 0 评论 -
Java设计模式-Interpreter (解释器)
解释器模式定义语言的文法,并且建立一个解释器来解释该语言中的句子。它属于类的行为模式。这里的语言意思是使用规定格式和语法的代码。应用环境:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。而且当文法简单、效率不是关键问题的时候效果最好。类图:抽象表达式角转载 2014-01-07 23:01:14 · 238 阅读 · 0 评论 -
JAVA设计模式-Template Method(模板方法)
定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。类型:行为类模式类图: 事实上,模版方法是编程中一个经常用到的模式。先来看一个例子,某日,程序员A拿到一个任务:给定一个整数数组,把数组中的数由小到大排序,然后把排序之后的结果打印出来。经过分析之后,这个任务大体上可分为两部分,排序和打印,打印功能好转载 2014-01-07 23:11:15 · 247 阅读 · 0 评论 -
Java设计模式-Decorator(装饰)
刚看了一篇博客,讲装饰器模式的,我觉得写得很清楚,我自己就没写了,只是把代码整理了一下,顺便说一下,所有设计模式的代码我都进行了整理,后面我会放到csdn上,这些代码大多数来时internet,但是我会把代码进行简化,让它能够突出设计模式的概念。下面是转帖的内容。 记得以前听一个高手说java.io包采用了了装饰器模式,当时不是很明白什么事装饰器模式,现在,网上看了一下说明和帮助的转载 2014-01-07 13:16:37 · 199 阅读 · 0 评论 -
Java设计模式-Proxy (代理)
1. 简介代理模式(Proxy Pattern)是GoF 23种Java常用设计模式之一。代理模式的定义:Provide a surrogate or placeholder for another object to controlaccess to it(为其他对象提供一种代理以控制对这个对象的访问)。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、转载 2014-01-07 14:14:04 · 354 阅读 · 0 评论 -
Java设计模式-Flyweight (享元)
Flyweight 定义: 避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类).面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可能显得很庞大,比如,字处理软件,如果以每个文字都作为一个对象,几千个字,对象数就是几千,无疑耗费内存,那么我们还是要"求同存异",找出这些对象群的共同点,设计一个元类,封装可以被共享的类,另外,还有一些特性是转载 2014-01-07 14:08:19 · 244 阅读 · 0 评论 -
JAVA设计模式-Builder (生成器 )
Builder设计模式类似于Factory,都是用于生产一种产品,但是他们之间还是有一些区别的。至于有什么区别,仁者见仁,智者见智,我会在介绍完Builder模式之后说说我自己的看法,当然我的想法也参考了很多其他人的看法。下面先看一个例子吧: 当要生产的一种产品具有相同的结构,并且每个构件的生产都很繁杂,就可以用Builder模式将具体构件的生产与整个成品的组装分离开来。还是拿本文转载 2013-12-31 00:02:21 · 207 阅读 · 0 评论 -
JAVA设计模式-Prototype (原型)
Prototype是很容易理解也很容易使用的一个设计模式,他的意思就是说,我给你一个原型,你照着这个原型给我做一个就行了,至于做好之后我要怎么去修改它让他符合新的需求,这就不管Prototype模式的事了。如果按照这么理解,我们只需要克隆一个一模一样的对象,返回给客户端就行了,重要的问题就是如何克隆。幸运的是,Java已经给我们提供了一个现成的函数,它就叫做clone()。 下面是转载 2013-12-31 00:10:51 · 218 阅读 · 0 评论 -
JAVA设计模式-Singleton (单例)
近来一直在研究JAVA的设计模式,看了很多别人的文章和源码,自己也写了一些,算是有一些认识吧,我想要把这些想法都记录下来。23个设计模式算很多了,希望我能有时间,也有毅力能够坚持下来。下面就是第一个设计模式,Singleton。 这个模式限制了使用这个模式的类只能生成一个对象。有一些对象其实我们完全只需要一个即可,如:线程池(threadpool)、缓存(cache)、注册表(转载 2013-12-31 00:19:00 · 237 阅读 · 0 评论 -
生产者消费者模式示例(一)
在JDK5.0以后,JAVA提供了新的更加健壮的线程处理机制,包括了同步、锁定、线程池等等,它们可以实现更小粒度上的控制。await()和signal()就是其中用来做同步的两种方法,它们的功能基本上和wait()/notify()相同,完全可以取代它们,但是它们和新引入的锁定机制Lock直接挂钩,具有更大的灵活性。下面是一个例子代码: import java.util.LinkedL原创 2014-01-02 12:15:59 · 320 阅读 · 0 评论 -
生产者消费者模式浅析
什么是生产者消费者模式在工作中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。在生产者与消费者之间在加个缓冲区,我们形象的称之为仓库,生产者负责往仓库了进商品,而消费者负责从仓库里拿商品,这就构成了生产者消费者模式。结构图如下:转载 2014-01-01 20:52:20 · 222 阅读 · 0 评论 -
JAVA设计模式-抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译,“为创建一组相关或相互依赖的对象提供一个借口,无需指定转载 2013-12-30 23:50:49 · 184 阅读 · 0 评论 -
JAVA设计模式-工厂方法模式
package com.fsti.factory.factorymethod;public interface Output { public final static Integer MAX_CACHE_LINE = 3; void getData(String str); void out();}package com.fsti.factory.factorymethod;转载 2013-12-30 23:36:07 · 223 阅读 · 0 评论 -
Java设计模式-总述
掌握设计模式,有利于开发中,对系统的复用进行有利的选择。可以说,程序员只有真正掌握了模式的设计,理解其中的精髓,才能把自己的编码发挥到最高的水平。由于时间关系,一直未能读完设计模式,每次都是断断续续....今日难得有时间学习一下,打算花点时间和精力把java设计模式中的相关用法总结一下,其中总结的资料大多数来自网上一些相资料的集合,再加上个人的一些心得与体会。闲话不必多说,言归正传。一般来说,转载 2013-12-30 13:19:09 · 231 阅读 · 0 评论 -
JAVA设计模式-Adapter (适配器)
一、定义适配器模式:属于结构型模式,其主要作用是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。The Adapter Pattern converts the interface of a class into another interface the clients expect. Adapater lets class原创 2014-01-03 13:34:42 · 219 阅读 · 0 评论 -
JAVA设计模式-Bridge(桥接)
1、核心意图: 将抽象部分和实现部分分离,使它们都可以独立的变化。该模式的目标是通过把高层的抽象和底层的实现分开,分别构建自己的类层次结构,并通过实现部分的接口将两部分进行桥接,从而达到高层抽象和底层实现可以独立的方便扩展的目的。其核心是分离,和委托。 2、身边实例: Java语言的一个非常重要的特点是平台的无关性,对于一般的高级语言所编写的程序,如果要在不同的平台上运行,为了转载 2014-01-06 13:12:43 · 213 阅读 · 0 评论 -
Java设计模式-Composite (组合)
Composite定义: 将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树形结构图。组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行。可转载 2014-01-07 13:08:13 · 189 阅读 · 0 评论 -
JAVA设计模式-State (状态 )
参考文章:http://blog.csdn.net/jeanszu/article/details/7771123 http://blog.csdn.net/java_1111/article/details/8653418 State模式的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为.何时使用?State模式在实际使用中比较多原创 2014-01-08 00:02:23 · 231 阅读 · 0 评论