三、生成器模式Builder(创建型)

来源:互联网 发布:常见的nosql数据库 编辑:程序博客网 时间:2024/05/18 03:40

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它的思路大概是这样的:整个构建过程分为两个部分,首先依靠Director对象进行指导创建,这里的指导主要是创建操作的各种顺序,然后具体的构建却是由Builder来进行的。另外Builder一般会设计成为接口,这样就可以实现不同的Builder给Director使用,Director就可以给Client生成不同的对象了。

Builder模式适用于:创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;构造过程必须允许被构造的对象有不同的表示时。


Director指导Builder创建Product的过程,并调用Builder的getResult方法获取Product。其中Builder和Product都是接口,这样可以通过向Director传入不同的ConcreteBuilder来完成不同的创建方法,还可以生产不同的产品。当产品的床架工艺变复杂时,只需要修改Director中的创建步骤,就可以影响到生产出来的Product。

public interface Product {public void giveName(String name);}public class ConcreteProduct implements Product{private String name = null;public void giveName(String name){this.name = name;}public String toString(){return "ConcreteProduct: "+name;}}public interface Builder {public void buildPart();public Product getResult();}public class ConcreteBuilder implements Builder{private Product product;public ConcreteBuilder() {product = new ConcreteProduct();}@Overridepublic void buildPart() {product.giveName("new name");}public Product getResult(){return product;}}public class Director {public Product Construct(Builder builder){builder.buildPart();//创建前的操作return builder.getResult();}}public class Client {@Testpublic void testBuilder(){Builder builder = new ConcreteBuilder();Director director = new Director();Product product = director.Construct(builder);System.out.println(product.toString());}}

通过Builder模式,你可以改变一个产品的内部表示,毕竟产品对外都是接口,具体实现类就会被隐藏起来;还可以将构造代码和表示代码分开;还可以让你通过Builder的子类对构造过程进行更精细的控制。

0 0
原创粉丝点击