1. 定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2.
四个要素
- 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
- 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
- 建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
- 导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。
例子:
通过导演类得到小汽车和公交车这两个车的产品。
ps: 我把产品类分成了Bus和Car两个产品,但是还是通过一个builder类来进行构建。就是把builder中的setProduct方法用反射来实现
1. Bus对象
/** * 公共汽车对象 * * @author king * */ public class Bus { private String name; private String type; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } @Override public String toString() { System.out.println("Bus名: " + this.getName() + "--Bus类型: " + this.getType()); return null; } }
2. Car对象
/** * 小汽车对象 * * @author king * */ public class Car { private String name; private String type; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } @Override public String toString() { System.out.println("Car名: " + this.getName() + "--Car类型: " + this.getType()); return null; } }
3.抽象建造者
import java.util.Map; /** * 抽象建造者类 * * @author king * */ public abstract class Builder { //设置产品 abstract void setProduct(Class clazz,Map setMap); //返回产品 abstract Object getProduct(); }
4.具体建造者
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Iterator; import java.util.Map; /** * 具体建造者类 * * @author king * */ public class ConcreteBuilder extends Builder { private Object obj = null;; //用反射的方法得到实例化的产品 void setProduct(Class clazz, Map setMap) { try { obj = clazz.newInstance(); Field[] fields = clazz.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; String fieldName = field.getName(); String stringLetter = fieldName.substring(0, 1).toUpperCase(); String setName = "set" + stringLetter + fieldName.substring(1); if (setMap.containsKey(fieldName)) { Method setMethod = clazz.getMethod(setName, new Class[] { field.getType() }); setMethod.invoke(obj, new Object[] { setMap.get(fieldName) }); } } } catch (Exception e) { e.getMessage(); } } Object getProduct() { return obj; } }
5.导演类
import java.util.HashMap; import java.util.Map; /** * 导演类,返回请求对象 * * @author king * */ public class Director { private Builder builder = new ConcreteBuilder(); Object getProductOfBus() { Map attributeMap = new HashMap(); attributeMap.put("name", "bus"); builder.setProduct(Bus.class,attributeMap); Object obj = builder.getProduct(); return obj; } Object getProductOfCar() { Map attributeMap = new HashMap(); attributeMap.put("name", "car"); builder.setProduct(Car.class,attributeMap); Object obj = builder.getProduct(); return obj; } }
6. 主方法入口
/** * 程序入口方法 * * @author king * */ public class Main { public static void main(String[] args) { //实列化导演类 Director director = new Director(); //我需要得到小汽车这个产品 Object car = director.getProductOfCar(); car.toString(); //我需要得到公共汽车这个产品 Object bus = director.getProductOfBus(); bus.toString(); } }
运行结果
Car名: car--Car类型: null
Bus名: bus--Bus类型: null
我们发现,当再需要一个产品的时候,只需要添加一个产品类,并且在导演类中添加构造该类的方法,不需要做其它操作了
总结
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。
文章参考: <http://blog.csdn.net/java7star/article/details/9092871>此处致谢
相关推荐
建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...
"设计模式-建造者模式" 设计模式是软件开发中常用的解决问题的方法和模式,旨在提高软件的可维护性、灵活性和可重用性。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。今天,我们将讨论创建型模式...
建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...
**建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...
建造者模式是软件设计模式中的一种,属于创建型模式,它的主要目的是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java的23种设计模式中,建造者模式是一个非常实用且重要的模式。 ...
以下是关于“C#设计模式之建造者模式”的详细说明。 **建造者模式的核心概念** 1. **产品类(Product)**: 这是最终要创建的对象,比如在本实例中可能是`Actor`类,代表一个角色。产品类通常包含多个组成部分,...
【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...
java常用设计模式-建造者模式 -java常用设计模式-建造者模式是java中的一种创建型设计模式,它允许开发者通过一步一步地构建复杂对象来创建不同类型的对象。 建造者模式的定义 建造者模式是一种创建型设计模式,...
建造者模式,是设计模式中的一种创建型模式,它的核心思想是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java编程中,这种模式经常用于生成对象,特别是当对象的创建过程较为复杂时,...
Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...
建造者模式是一种软件设计模式,属于创建型模式之一,主要用于解决创建复杂对象的问题。在实际应用中,当对象的构造过程过于复杂,涉及到多个属性或者子对象的组合时,直接通过构造函数创建可能会导致代码混乱、难以...
在给定的压缩包文件中,"设计模式例子,观察者模式,建造者模式" 提到了两种重要的设计模式:观察者模式(Observer Pattern)和建造者模式(Builder Pattern)。下面我们将深入探讨这两种设计模式的概念、应用场景、...
建造者模式是软件设计模式中的一种,属于创建型模式,它的主要目的是将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。在Java中,建造者模式经常用于构造复杂对象,通过一步一步地创建对象,使得...
其中,建造者模式属于创建型模式,主要用于解决构建复杂对象的问题。 ### 建造者模式解析 建造者模式的核心思想是将一个复杂的对象分解为多个简单的组成部分,然后通过一个构建者来组装这些部分。这样做的好处是...
建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 14.备忘录模式 15.组合模式 16.迭代器模式 17.单例模式 18.桥接模式 19.命令模式 20.职责链模式 21.中介者模式 22.享元模式 23.解释器模式 24....
建造者模式(Builder)是设计模式中的一种结构型模式,它允许我们分步骤构建复杂的对象,而无需暴露构造过程。这种模式将构造过程与对象的表示分离,使得同样的构造过程可以创建不同的表示。在C++中,建造者模式通常...