话说有一个银行,有三个窗口,但是每个窗口的智能都是一样的,即都能办理所有的业务。因此每位来银行办理业务的人只要排队就是了,排到你了,就向业务员说明你要办理的业务,然后业务员根据你的业务选择不同的单据,打开不同的账本。……。
业务员此时典型的工作流程是:
if (service instanceof Saving){
//存款
......
}else if (service instanceof Draw){
//提款
......
}else if (service instanceof Fund){
...
意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。(GoF)
场景
现在我们有很多表要处理,同时又有很多操作要做。最简单的做法是在一个类里做完所有的操作,如我们在EJB服务器端的实现中进行JDBC操作。可是这样一来这个类将无比巨大,大到四只眼(眼睛兄)都看不过来!
有什么好办法能够降低这样操作的杂乱性呢?我们注意到这里有两个概念,分别是“表单(Table)”和“操作(Operator)”。也就是说这里有两个部分——“抽象”和“实现”。我们将这两个 ...
意图
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(GoF)
场景
相信很多人都知道什么是显卡,也有很多人知道显卡的本名——图形适配器。恩,是的,正好这回说说Apater模式,就拿显卡来例子来分析一下Adapter模式。
我们知道显示器(Client)是用来显示图形的,它是不能显示数据,它只能够接受来自图形发送设备Target的信号。可是我们手头上只有CPU(Adaptee)这个产生各种描述图形的数据的数据发送器。我们需要将这些数据让显示器进行显示,可是这两个部件却是不兼容的。于 ...
意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。(G4)
场景
不知大家用过Derby这个嵌入式数据库没有,同一时间只能有一个进程访问Derby。这样我们就需要设置一个全局唯一的操作类对进行Derby数据库的各种操作。Singleton便是解决这类问题的一颗银弹。
在Java中static指定的属性在JVM中是全局唯一的,利用这一点我们便可以来实现Singlton的效果。
* 注意要将默认的构造函数设置成private的,这样才能保证只能通过getSingleton()来获取单一的实例。
java 代码
public ...
下面来说说Prototype模式。首先还是照旧先来看看牛人想出Prototype模式的意图。
用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。(G4)
场景
我们手头上已经得到一个Product实例了,现在我们由于业务的要求,需要再获取若干个完全一样或相近的Product,好完成其他的工作。这个时候我们要做的工作就是复制一个。按照以往的做法,我们是每要求复制出一个的时候,我们会先new出一个对象,然后逐个属性地先从样板Product中get出来再set到新对象中去。
java 代码
public class Clas ...
关于工厂模式,没什么好说的,实在太常见了。不过作为设计模式的完整性,还是将它写出来来。
以前我们创建一个对象时通常是采用new的方式,如
java 代码
Product proa = new ProductA();
Product prob = new ProductB();
这样进行实例创建的一个结果是,当Product子类越来越多的时候,这样就需要修改new代码。这样是很麻烦的。一个解决的方法就是使用一个对象来管理这些对象的创建。这个用来创建对象的便是Fac ...
对于Builder模式很简单,但是一直想不明白为什么要这么设计,为什么要向builder要Product而不是向知道建造过程的Director要。刚才google到一篇文章,总算清楚了。在这里转贴一下这位richardluo的比喻。
简单地说,就好象我要一座房子住,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高),于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这里砌一堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什 ...
试着总结一下学过的设计模式,就由创建型模式说起吧。
意图
提供一个创建一系列相关活相互依赖对象的接口,而无需指定他们具体的类。(G4)
任务
假设我们需要进行各种数据库操作,可是我们有很多的选择啊,JDBC,Hibernate,Ibatis等等。本来选择一个就OK了,可是变态的Boss为了炫耀我们的技术如何如何强大,竟说我们能够无成本地在这三个解决方案间切换。这下系统该怎么设计呢?
或许你已经注意到每种解决方案自身都是完备而独立的,不错,这便是解决问题的切入点。提供一套解决方案公有行为的接口,各个解决方案分别实现这些接口,同时建立一个创建各个解决方案的工厂(Factory)。 ...
- 浏览: 28373 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
最新评论
-
Visitor - 访问者模式
楼主大哥的这个vistor模式,小弟偶曾在工商银行取钱时就是这样的,呵呵,更加深 ...
-- by h_yz -
Visitor - 访问者模式
受教了,真的很不错。
-- by wjh0205 -
Visitor - 访问者模式
有一点没说:访问者模式一般用在数据结构稳定的情况下。银行这个例子不是很合适,因为 ...
-- by 渐行渐远 -
Visitor - 访问者模式
lintomny 写道 话说有一个银行,有三个窗口,但是每个窗口的智能都是 ...
-- by farryu -
Visitor - 访问者模式
解释的不错,不过可能稍有点不够详细。
-- by zhangcheng






评论排行榜