目前任职于搜狐~
分类: Java
2014-02-13 22:50:12
建造者模式也叫生成器模式,23种设计模式之一,属于创建类模式。
在描述建造者模式之前,大家首先要明白一个道理就是任何设计模式的产生都是为了解决某一类问题,更准确的说是为了应对某一种变化,设计模式就是封装变化,把变化的部分和不变的部分隔离开。设计模式的好处就是运用面向对象的思想让我们能够更简单方便的应对外界需求的变化。比如工厂模式的产生是由于我们要根据外界的需求生产出不同类型的产品,这一变化就是外界的需求是不确定的,工厂模式就是为了应对这种变化而产生。那建造者模式是为了应对哪一种变化呢?
首先还是看下GOF对建造者模式的定义:将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建出不同的表示。GOF的语言一般都比较言简意赅,但也有点晦涩难读。
看到有网友用KFC的例子来描述建造者模式,我觉得还是比较贴近的,我们也借用这个例子描述一下:
假设KFC推出两种套餐:奥尔良鸡腿堡套餐和香辣鸡腿堡套餐,奥尔良套餐包括:一个奥尔良鸡腿堡、一个炸鸡翅、一杯雪碧。鸡腿堡套餐包括:一个香辣鸡腿堡、一份薯条、一杯可乐。每份套餐都是:主食、副食、饮料。
KFC服务员要根据顾客的要求来提供套餐,那这个需求里面什么是固定的,什么是变化的呢?很明显顾客都是要的套餐,顾客的目的是一样的。 套餐里面都是主食、副食、饮料,这也是固定的。至于主食是什么、副食是什么、饮料是什么这个是变化的。
在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却相对稳定。当遇到这种场景时,你就可以考虑能否用建造者模式实现了。
下面我们用一个例子描述下建造者模式的代码实现过程。
1、第一个文件House.java
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
(1)使用建造者模式可以使客户端不必知道产品内部组成的细节。
(2)具体的建造者类之间是相互独立的,对系统的扩展非常有利。
(3)由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。