设计模式之建造者模式(Builder)
2014-10-05 20:53
330 查看
建造者模式(Builder Pattern)也叫生成器模式,其定义如下:“separate the construction of a complex object from its representation so that the same construction process can create different representations“。将一个复杂对象的构建与它的标示分离,使同样的构建过程刻意创建不同的表示。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
建造者模式的优点:
封装性:使用建造者模式可以使客户端不必知道产品内部组成的细节,如例子中我们就不需要关心每一个具体的模型内部是如何实现的,产生的对象类型就是CarModel。
可扩展性:Builder之间是相互独立的,与其它的Builder无关,对系统的扩展非常有利。
可控性:由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
建造者模式有四种角色:
产品(Product)。产品就是要被构造的复杂对象,包含对象的各个组成部件,包括将这些部件装配成最终产品的方法。
建造者(Builder)。一个抽象接口,规范产品各个组成部件的建造。接口包含两种方法,一是各部分建造的方法,二是返回产品结果的方法。
具体建造者(ConcreteBuilder)。实现建造者接口,提供产品的实例。
指导者(Director)。构造一个Builder接口的对象,不需要知道产品内容。
下面以建立一个学生对象为例子。
首先,定义一个学生信息类,包含学生信息的各个组成成分和一个显示具体信息的方法。
然后,定义建造者需要的行为。
接着,实现建造者的接口。
而指导者则是传入的Builder和Builder的参数来构造Builder。
最后,测试一下。
结果显示:
与工厂方法模式相比,建造者模式关注的是各个部件的类型和装配工艺(顺序)。
与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
建造者模式的优点:
封装性:使用建造者模式可以使客户端不必知道产品内部组成的细节,如例子中我们就不需要关心每一个具体的模型内部是如何实现的,产生的对象类型就是CarModel。
可扩展性:Builder之间是相互独立的,与其它的Builder无关,对系统的扩展非常有利。
可控性:由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
建造者模式有四种角色:
产品(Product)。产品就是要被构造的复杂对象,包含对象的各个组成部件,包括将这些部件装配成最终产品的方法。
建造者(Builder)。一个抽象接口,规范产品各个组成部件的建造。接口包含两种方法,一是各部分建造的方法,二是返回产品结果的方法。
具体建造者(ConcreteBuilder)。实现建造者接口,提供产品的实例。
指导者(Director)。构造一个Builder接口的对象,不需要知道产品内容。
下面以建立一个学生对象为例子。
首先,定义一个学生信息类,包含学生信息的各个组成成分和一个显示具体信息的方法。
public class Student { private String name = null; private int age = -1; private String sex = null; private float weight = -1; private float height = -1; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } public float getHeight() { return height; } public void setHeight(float height) { this.height = height; } public void showInfo() { System.out.println("姓名:" + getName() + "\n性别:" + getSex() + "\n年龄:" + getAge() + "岁\n身高:" + getHeight() + "厘米\n体重:" + getWeight() + "公斤"); } }
然后,定义建造者需要的行为。
/** * 接口,定义建造者要做的行为 */ public abstract class Builder { protected Student student = new Student(); public abstract void setName(String name); public abstract void setAge(int age); public abstract void setSex(String sex); public abstract void setWeight(float weight); public abstract void setHeight(float height); public abstract Student getStudent(); }
接着,实现建造者的接口。
/** * 建造者实现类,执行具体操作 */ public class CollegeStudentBuilder extends Builder { @Override public void setName(String name) { student.setName(name); } @Override public void setAge(int age) { student.setAge(age); } @Override public void setSex(String sex) { student.setSex(sex); } @Override public void setWeight(float weight) { student.setWeight(weight); } @Override public void setHeight(float height) { student.setHeight(height); } @Override public Student getStudent() { return student; } }
而指导者则是传入的Builder和Builder的参数来构造Builder。
/** * 指导者/设计师,构建一个建造者 */ public class Director { private Builder mBuilder = null; public Director(Builder builder) { mBuilder = builder; } public void construct(String name, int age, String sex, float weight, float height) { mBuilder.setName(name); mBuilder.setAge(age); mBuilder.setSex(sex); mBuilder.setHeight(height); mBuilder.setWeight(weight); } }
最后,测试一下。
public class JavaTest { public static void main(String[] args) { Builder builder = new CollegeStudentBuilder(); Director director = new Director(builder); director.construct("张三", 18, "男", 56, 172); Student student = builder.getStudent(); student.showInfo(); } }
结果显示:
姓名:张三 性别:男 年龄:18岁 身高:172.0厘米 体重:56.0公斤
与工厂方法模式相比,建造者模式关注的是各个部件的类型和装配工艺(顺序)。
与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
相关文章推荐
- 我的设计模式之旅(4)――生成器(建造者)模式Builder
- C#设计模式之建造者(Builder)模式示例源代码
- Net设计模式实例之建造者模式(Builder Pattern)(2)
- .NET设计模式(4):建造者模式(Builder Pattern)
- Java设计模式-----Builder建造者模式
- 设计模式 Design Parttern ——建造者模式 Builder
- C#设计模式之建造者(Builder)模式示例源代码
- 设计模式读书笔记之建造者模式(Builder)
- 一天一个设计模式之建造者模式(Builder)
- .NET设计模式(4):建造者模式(Builder Pattern)
- .NET设计模式(4):建造者模式(Builder Pattern)
- .NET设计模式(4):建造者模式(Builder Pattern)
- .Net设计模式学习笔记(四):建造者模式(Builder Pattern)
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式学习笔记(十二)—Builder建造者模式
- .NET设计模式(4):建造者模式(Builder Pattern)
- Net设计模式实例之建造者模式(Builder Pattern)
- 设计模式——建造者模式【Builder Pattern】
- C#设计模式之建造者(Builder)模式示例源代码(外摘)