定义
建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以构建不同的表示
Builder Pattern: Separate the construction of a complex object from its representation so that the same construction process can create different representations
优点
- 封装性,可以使客户端不必知道产品内部组成细节
- 建造者独立,容易扩展
- 便于控制细节风险
使用场景
- 相同的方法,不同的执行顺序,产生不同的时间结果时
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时
- 产生类非常复杂,或者产品类中的调用顺序不同产生了不同的效能
实现方法
Product产品类:通常实现了模板方法模式
Builder抽象建造者:规范产品的组建,一般由子类实现
ConcreteBuilder具体建造者:实现抽象类定义的所有方法,并返回一个建造好的对象
Director导演类:负责安排已有模块的顺序,然后告诉Builder开始建造
具体实现
产品抽象类
public abstract class CarModel { private ArrayList<String> sequence = new ArrayList<String>(); protected abstract void start(); protected abstract void stop(); protected abstract void alarm(); protected abstract void engineBoom(); final public void run() { for (int i = 0; i < sequence.size(); i++) { String actionName = this.sequence.get(i); if (actionName.equalsIgnoreCase("start")) { this.start(); } else if (actionName.equalsIgnoreCase("stop")) { this.stop(); } else if (actionName.equalsIgnoreCase("alarm")) { this.alarm(); } else if (actionName.equalsIgnoreCase("engine boom")) { this.engineBoom(); } } } final public void setSequence(ArrayList<String> sequence) { this.sequence = sequence; } }
产品实现类A
public class BenzModel extends CarModel { @Override protected void start() { System.out.println("Benz Start!"); } @Override protected void stop() { System.out.println("Benz Stop!"); } @Override protected void alarm() { System.out.println("Benz Alarm!"); } @Override protected void engineBoom() { System.out.println("Benz Engine Boom!"); } }
产品实现类B
public class BMWModel extends CarModel { @Override protected void start() { System.out.println("BMW Start!"); } @Override protected void stop() { System.out.println("BMW Stop!"); } @Override protected void alarm() { System.out.println("BMW Alarm!"); } @Override protected void engineBoom() { System.out.println("BMW Engine Boom!"); } }
抽象建造者
public abstract class CarBuilder { public abstract void setSequence(ArrayList<String> sequence); public abstract CarModel getCarModel(); }
具体建造者A
public class BenzBuilder extends CarBuilder { private BenzModel benz = new BenzModel(); @Override public void setSequence(ArrayList<String> sequence) { this.benz.setSequence(sequence); } @Override public CarModel getCarModel() { return benz; } }
具体建造者B
public class BMWBuilder extends CarBuilder { private BMWModel bmw = new BMWModel(); @Override public void setSequence(ArrayList<String> sequence) { this.bmw.setSequence(sequence); } @Override public CarModel getCarModel() { return bmw; } }
导演类
public class Director { private ArrayList<String> sequence = new ArrayList<String>(); private BenzBuilder benzBuilder = new BenzBuilder(); private BMWBuilder bmwBuilder = new BMWBuilder(); public BenzModel getABenzModel() { this.sequence.clear(); this.sequence.add("start"); this.sequence.add("stop"); this.benzBuilder.setSequence(sequence); return (BenzModel) this.benzBuilder.getCarModel(); } public BenzModel getBBenzModel() { this.sequence.clear(); this.sequence.add("engine boom"); this.sequence.add("start"); this.sequence.add("stop"); this.benzBuilder.setSequence(sequence); return (BenzModel) this.benzBuilder.getCarModel(); } public BMWModel getABMWModel() { this.sequence.clear(); this.sequence.add("start"); this.sequence.add("stop"); this.bmwBuilder.setSequence(sequence); return (BMWModel) this.bmwBuilder.getCarModel(); } public BMWModel getBBMWModel() { this.sequence.clear(); this.sequence.add("engine boom"); this.sequence.add("start"); this.sequence.add("stop"); this.bmwBuilder.setSequence(sequence); return (BMWModel) this.bmwBuilder.getCarModel(); } }
场景类
public class Client { public static void main(String[] args) { Director director = new Director(); for (int i = 0; i < 2; i++) { director.getABenzModel().run(); } for (int i = 0; i < 3; i++) { director.getBBenzModel().run(); } for (int i = 0; i < 2; i++) { director.getABMWModel().run(); } for (int i = 0; i < 3; i++) { director.getBBMWModel().run(); } } }
PS:基本理解这种写法的思想和意义,但不深刻
参考内容:
《设计模式之禅》秦小波
相关推荐
本文将重点介绍标题中提到的五种设计模式:建造者模式、代理模式、观察者模式、策略模式以及状态模式。 **1. 建造者模式(Builder)** 建造者模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露...
建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...
这些模式在不同的开发环境中都展现出其价值,包括单例模式、工厂模式、观察者模式、装饰器模式、适配器模式、建造者模式等。 在C#中,我们可以利用面向对象的特性,如类、接口和继承,来实现这些设计模式。例如,...
建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...
4. 建造者模式(Builder):将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 5. 适配器模式(Adapter):允许两个不兼容的接口协同工作。通过包装对象,适配器模式可以将旧的接口转换为新...
包括抽象工厂模式(Abstract Factory)、建造者模式(Builder)、工厂方法模式(Factory Method)、原型模式(Prototype)和单例模式(Singleton)等。 - **结构型模式**:关注于类或对象的组合方式,使它们能形成更...
java常用设计模式-建造者模式 -java常用设计模式-建造者模式是java中的一种创建型设计模式,它允许开发者通过一步一步地构建复杂对象来创建不同类型的对象。 建造者模式的定义 建造者模式是一种创建型设计模式,...
**建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...
建造者模式是软件设计模式中的一种,属于创建型模式,它的主要目的是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java的23种设计模式中,建造者模式是一个非常实用且重要的模式。 ...
整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法可以作为后来者的榜样。如果要知道怎样恰当定义和描述设计模式,我们应该可以从他们那儿获得启发”--steve...
建造者模式,是设计模式中的一种创建型模式,它的核心思想是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java编程中,这种模式经常用于生成对象,特别是当对象的创建过程较为复杂时,...
Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...
建造者模式是软件设计模式中的一种,主要用于将复杂的对象构建过程与对象的使用分离,使得同样的构建过程可以创建不同的表示。在C#中,我们可以通过类的继承和接口的使用来实现这一模式。以下是关于“C#设计模式之...
在给定的压缩包文件中,"设计模式例子,观察者模式,建造者模式" 提到了两种重要的设计模式:观察者模式(Observer Pattern)和建造者模式(Builder Pattern)。下面我们将深入探讨这两种设计模式的概念、应用场景、...
建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现。这就是建造者模式。 建造者模式可以把一个产品的内部表象与产品的生成过程分隔开来,从而可以使一个建造过程就可以生成...
常见的创建型模式有单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。 2. 结构型模式:这类模式关注如何组合类和对象以获得更大的结构,主要涉及如何将类或对象结合在一起形成更大的结构,但同时保持...
1. **创建型模式**:如单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。它们关注对象的创建过程,使得代码在创建对象时更加灵活和可控。 2. **结构型模式**:如适配器模式、装饰器模式、代理模式、...