定义: 从一个简单对象一步一步构造复杂对象
优点及使用:
- 仅仅通过指定的类型和内容构建复杂对象,而且隐藏构造的实现细节
- 解耦通过对象组件构造一个复杂对象的过程
- 分离构造和显示的代码
- 通过构造过程达到良好的控制
- 相关模式有:
抽象工厂:重点是在工厂模式(简单工厂或者复杂工厂),而构建者模式重点是由简单对象构建复杂对象
复合模式:它经常被用来构建复杂对象
例子:
为了建设一座房子,我们需要按照以下步骤:
1.建设基础设施
2.建设主体框架
3.装修外部
4.装修内部
让我们用一个抽象类HouseBuilder来定义这四个步骤。任何HouseBuilder的子类需要根据这四个步骤建设房子(也就是在子类中实现这四个方法),接着我们用WorkShop来规范这四个步骤的顺序(也就是必须完成前三步才能装修内部)。类TestBuilder用来测试这些类的协调性和检查构建过程。
import java.util.*;
class WorkShop{
//规范构建过程顺序
public void construnct(HouseBuilder hb){
hb.buildFoundation();
hb.buildFrame();
hb.buildExterior();
hb.buildInterior();
}
}
//定义建房子的方法
abstract class HouseBuilder{
protected House house = new House();
protected String showProgress(){
return house.toString();
}
abstract public void buildFoundation();
abstract public void buildFrame();
abstract public void buildExterior();
abstract public void buildInterior();
}
class OneStoryHouse extends HouseBuilder {
public OneStoryHouse(String features) {
house.setType(this.getClass() + " " + features);
}
public void buildFoundation() {
//doEngineering()
//doExcavating()
//doPlumbingHeatingElectricity()
//doSewerWaterHookUp()
//doFoundationInspection()
house.setProgress("foundation is done");
}
public void buildFrame() {
//doHeatingPlumbingRoof()
//doElectricityRoute()
//doDoorsWindows()
//doFrameInspection()
house.setProgress("frame is done");
}
public void buildExterior() {
//doOverheadDoors()
//doBrickWorks()
//doSidingsoffitsGutters()
//doDrivewayGarageFloor()
//doDeckRail()
//doLandScaping()
house.setProgress("Exterior is done");
}
public void buildInterior() {
//doAlarmPrewiring()
//doBuiltinVacuum()
//doInsulation()
//doDryWall()
//doPainting()
//doLinoleum()
//doCabinet()
//doTileWork()
//doLightFixtureBlinds()
//doCleaning()
//doInteriorInspection()
house.setProgress("Interior is under going");
}
}
class TwoStoryHouse extends HouseBuilder {
public TwoStoryHouse(String features) {
house.setType(this.getClass() + " " + features);
}
public void buildFoundation() {
//doEngineering()
//doExcavating()
//doPlumbingHeatingElectricity()
//doSewerWaterHookUp()
//doFoundationInspection()
house.setProgress("foundation is done");
}
public void buildFrame() {
//doHeatingPlumbingRoof()
//doElectricityRoute()
//doDoorsWindows()
//doFrameInspection()
house.setProgress("frame is under construction");
}
public void buildExterior() {
//doOverheadDoors()
//doBrickWorks()
//doSidingsoffitsGutters()
//doDrivewayGarageFloor()
//doDeckRail()
//doLandScaping()
house.setProgress("Exterior is waiting to start");
}
public void buildInterior() {
//doAlarmPrewiring()
//doBuiltinVacuum()
//doInsulation()
//doDryWall()
//doPainting()
//doLinoleum()
//doCabinet()
//doTileWork()
//doLightFixtureBlinds()
//doCleaning()
//doInteriorInspection()
house.setProgress("Interior is not started yet");
}
}
class House {
private String type = null;
private List features = new ArrayList();
public House() {
}
public House(String type) {
this.type = type;
}
public void setType(String type) {
this.type = type;
}
public String getType() {
return type;
}
public void setProgress(String s) {
features.add(s);
}
public String toString() {
StringBuffer ff = new StringBuffer();
String t = type.substring(6);
ff.append(t + "\n ");
for (int i = 0; i < features.size(); i ++) {
ff.append(features.get(i) + "\n ");
}
return ff.toString();
}
}
class TestBuilder {
public static void main(String[] args) {
HouseBuilder one = new OneStoryHouse("2 bedrooms, 2.5 baths, 2-car garage, 1500 sqft");
HouseBuilder two = new TwoStoryHouse("4 bedrooms, 4 baths, 3-car garage, 5000 sqft");
WorkShop shop = new WorkShop();
shop.construct(one);
shop.construct(two);
System.out.println("Check house building progress: \n");
System.out.println(one.showProgress());
System.out.println(two.showProgress());
}
}
//需要jdk1.5或者以上版本
}
也可以通过将每个方法设计成类来改良以上例子,相似的方法类可以一次设计处处使用,例如:窗户,门,厨房等等。
分享到:
相关推荐
构建者模式、回调和观察者设计模式是软件开发中常用的设计模式,它们分别在不同的场景下发挥着重要的作用。下面将详细介绍这三个设计模式,并通过一个简单的例子来展示它们的应用。 首先,构建者模式(Builder ...
构建者模式是创建型设计模式的一种,它允许用户通过指定复杂对象的类型和内容来逐步创建它们。该模式分离了对象的构建和表示,使其能够创建不同的表示,而不需要改变构建过程。 在软件开发中,构建者模式特别适用于...
详解 Java 构建者模式 Builder Java 构建者模式 Builder 是一种创建型模式,用于一步步创建一个复杂对象。该模式将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离。这种模式非常适合在构建复杂...
构建者模式在Java面向对象编程中的应用与优势
在本教程中,我们将探索如何设计一个足球引擎,并利用四个重要的设计模式——观察者模式、装饰者模式、策略模式和构建者模式。这些模式是软件工程中的核心概念,能够提高代码的灵活性、可维护性和可扩展性。我们将...
构建者模式 单例模式 适配器模式 接口、抽象类、回调 在我看来,可复用的模块不止功能类,也可以是页面的布局元素,比如弹窗、标题栏、按钮等元素,由于是一个公司出品的app,所以整体风格元素都差不多,所以这些...
创建型模式,共五种: 工厂方法模式、抽象工厂模式、单例模式、构建者模式、原型模式。 结构型模式,共七种: 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种...
本文将围绕“使用设计模式构建通用数据库访问类”这一主题,深入探讨如何通过抽象基类与继承机制,结合具体的设计模式,如工厂模式和策略模式,来创建一个灵活且高效的数据库访问层。 ### 设计模式的重要性 设计...
建造者模式,作为一种设计模式,能够帮助我们优雅地构建复杂对象,它将对象的创建过程逐步分解,使得创建过程更加灵活,同时也使代码结构更加清晰。在本示例中,“Android利用建造者模式自定义Dialog”旨在利用这种...
MNProgressDialog一个常用的自定义弹框封装(适配AndroidX),加载ProgressDialog,状态显示的StatusDialog和自定义Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模式,链式调用。截图:...
3. 构建者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。通常用于构建具有多种配置选项的对象。 4. 单例模式(Singleton Pattern):确保一个类只有一个实例...
在给定的文件列表中,我们可以看到几个关键类,它们可能是构建者模式的具体实现: 1. **DirectorResult.cs** - 这个类可能代表了“导演”角色,负责指导如何具体构建一个对象。导演类通常包含一个或多个方法,这些...
2-10 构建者模式的实用工程技术——代码的坏味道:算法与对象构建的隔离 2-11 原型模式的定义场景与实现——对象的快速复制 2-12 原型模式的实用工程技术——DRY原则与使用模式进行重构 3-1 适配器模式的定义、场景...
3. **构建者模式**:它是一种创建型模式,将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。构建者模式允许用户按步骤构建对象,提高了代码的灵活性和可维护性。 4. **适配器模式**:结构型...
以上介绍了三种常用的设计模式——单例模式、构建者模式和原型模式,每种模式都有其特定的应用场景。理解并熟练掌握这些设计模式有助于提升代码质量和系统的灵活性。在实际开发中,可以根据项目的具体需求选择合适的...
- 构建者模式(Builder):构建者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它可以更灵活地控制对象的构造过程。 - 单例模式(Singleton):单例模式确保一个类只有一个实例,并...
构建者模式允许创建复杂的对象,通过步骤化构建过程,确保构建过程的正确性,同时隔离了对象的创建和表示。在大型系统中,构建者模式可以帮助管理对象的构建,尤其是在需要创建多种变体时。 总结: 以上五种设计...
构建者模式用于分步骤创建复杂的对象,通过不同的具体构建器实现细节,使得相同的构建过程可以创建不同的表示。 ### 结构型模式 #### 1.6 适配器模式(Adapter) 适配器模式允许不兼容的接口之间的类能够一起工作...
4. **Builder模式**:构建者模式允许你逐步构建一个复杂的对象,而不必一次性创建所有的部分。 5. **Prototype模式**:原型模式通过复制现有的实例来创建新对象,从而避免了创建新实例时的开销。 #### 结构型模式...
在构建者模式中,有四个主要角色: 1. **产品(Product)**:这是要创建的复杂对象,拥有多个组成部分或属性。在代码中,它通常会定义一个接口或抽象类,用来表示产品的结构。 2. **建造者(Builder)**:定义了...