JAVA设计模式是个什么玩意儿_04_建造者模式

来源:互联网 发布:优酷ace mac 编辑:程序博客网 时间:2024/05/17 08:21

1. 说明

(1)英文名叫Builder,建造者模式,也叫生成器模式。

(2)属于创建型模式。

2. 定义


       要想实现同样的构建过程有不同的表现,自然的思路就是把构建过程独立出来,在生成器模式中把它称为指导者,由它来知道装配过程,但是不负责具体的构建。当然只有指导者也是不够的,得有具体的对象生成器。这样指导者就是可以重用的构建过程,而生成器是可以被切换的具体实现。举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。

3. 结构


        分4个角色,抽象建造者角色(Builder)、具体建造者角色(ConcreteBuilder)、导演者角色(Director)、产品角色(Product),主要说导演者角色,导演者角色是与客户端打交道的角色。导演者将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但是却不为客户端所知。

4. 代码

Product.java

Builder.java

ConcreteBuilder.java

Director.java

Client.java

public class Product {private String part1;private String part2;public String getPart1() {return part1;}public void setPart1(String part1) {this.part1 = part1;}public String getPart2() {return part2;}public void setPart2(String part2) {this.part2 = part2;}}


public interface Builder {public void buildPart1();public void buildPart2();public Product retrieveProduct();}

public class ConcreteBuilder implements Builder {private Product product = new Product();public void buildPart1() {product.setPart1("构建第1个部件");}public void buildPart2() {product.setPart2("构建第2个部件");}public Product retrieveProduct() {return product;}}

public class Director {private Builder builder;public Director(Builder builder) {this.builder = builder;}/** * 产品构造方法,负责调用各个零件建造方法 */public void construct() {builder.buildPart1();builder.buildPart2();}}

public class Client {public static void main(String[] args) {Builder builder = new ConcreteBuilder();Director director = new Director(builder);director.construct();Product product = builder.retrieveProduct();System.out.println(product.getPart1());System.out.println(product.getPart2());}}输出结果:构建第1个部件构建第2个部件

5. 总结

建造模式分成两个很重要的部分:

(1)一部分是Builder接口,这里是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中。

(2)另外一个部分是Director,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤地来执行。

  不管如何变化,建造模式都存在这么两个部分,一个部分是部件构造和产品装配,另一个部分是整体构建的算法。认识这点是很重要的,因为在建造模式中,强调的是固定整体构建的算法,而灵活扩展和切换部件的具体构造和产品装配的方式。

  再直白点说,建造模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用。具体的构造实现可以很方便地扩展和切换,从而可以灵活地组合来构造出不同的产品对象。



1 0
原创粉丝点击