建造者模式
定义
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程(包括创建出的形态和创建组建的顺序),且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。
角色
● Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。
●ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。
●Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。
● Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。客户端一般只需要与指挥者进行交互,在客户端确定具体建造者的类型,并实例化具体建造者对象(也可以通过配置文件和反射机制),然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥者类中。
实例与应用
1.比如一个人有不同的形态,但是都是人有头有身体
2.我觉得写的比较好的是那个游戏的角色的实例,使用建造者模式,不同的角色穿不同的衣服有不同的头像
// 一个典型的复杂类对象代码示例如下: class Productor { private Part partA; private Part partB; private Part partC; // 这些是各个部件的set和get的方法,在此省略。。。 } 这是抽象的Builder: abstract class Builder { public abstract void buildPartA(); public abstract void buildPartB(); public abstract void buildPartC(); } 继承Builder的具体的建造者: class ConcreteBuilder extends Builder { private Product product; // 创建partA public void buildPartA() { // 在此创建出部件 Part partA = new PartA(); // ...... // 把partA传递给product product.setPartA(partA); } // 创建partB public void buildPartB() { // 在此创建出部件 Part partB = new PartB(); // ...... // 把partB传递给product product.setPartB(partB); } // 创建partC public void buildPartC() { // 在此创建出部件 Part partC = new PartC(); // ...... // 把partC传递给product product.setPartC(partC); } // 返回复杂产品对象 public void getProduct() { return this.product; } } // 这是导演,负责流程规范,在导演类中可以注入建造者对象。 class Director { private Builder concretebuilder; // 构造方法中也可以传递builder public Director(Builder builder) { this.concretebuilder = builder; } // 传递builder public void setBuilder(Builder builder) { this.concretebuilder = builder; } // 这个方法用来规范流程,产品构建和组装方法 public void construct() { builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); } } // 客户端使用: class Main { public static void main(String[] args) { // 对于客户端而言,只需要关心具体的建造者,无需关心产品内部构建流程。我如果需要其他的复杂产品对象,只需要选择其他的建造者,如果需要扩展,则只需要写一个新的builder就行。如果可以,这个建造者甚至可以用配置文件做,增加更多的扩展性。 Builder builder = new ConcreteBuilder(); // 把建造者注入导演 Director director = new Director(builder); // 指挥者负责流程把控 director.construct(); // 建造者返回一个组合好的复杂产品对象 Productor productor = builder.getProductor(); } }
优点
1.使用建造者模式可以使客户端不必知道产品内部组成的细节。
2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
使用场景
1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时
与工厂模式比较
我们可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。
工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。
以上很多都是转载自:http://blog.csdn.net/hello_haozi/article/details/38819935
相关推荐
JAVA-设计模式-创建型模式-建造者模式
c++设计模式-创建型模式-建造者模式-qt工程源码,c++实现
Java创建型设计模式之建造者模式详解.rar
Java 常见创建型模式中的建造者模式及其实际开发中的变种模式
设计模式05-建造者、原型模式 设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 ...
担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。 ◆产品(Product): 产品便是建造中的复杂对象。 详细见博客 ...
建造者模式【设计模式】(八)–创建型模式–建造者模式建造者模式定义构造者模式的优点构造者模式的使用场景构造者模式和工厂模式区别构造者模式简单实现 建造者模式定义 Separate the construction of a complex ...
软件设计模式-2021秋-实验1-创建型模式实验报告附源码和类图.zip 工厂方法模式、建造者模式、抽象工厂模式、单例模式
建造者模式是一种创建型设计模式,用于简化复杂对象的创建过程。以下是建造者模式的关键概念和步骤: 1. **分离复杂对象的构建和表示**:建造者模式将一个复杂对象的构建过程与其最终的表示形式分离开来。这样做的...
概述 建造者模式是相对比较简单的一种设计模式,属于创建型模式的一种; 定义:将一个复杂的对象分解成多个简单的对象来进行构建,将复杂的构建层与表现层分离,使相同的构建过程可以创建不同的表示模式; 优点...
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...
介绍了三种创建型设计模式:单例设计模式;原型设计模式;建造者设计模式;
NULL 博文链接:https://jacky-dai.iteye.com/blog/2295399
建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合...
包含三个实验,建造者模式(假设生产计算机只需要CPU、内存、显卡、显示器和光驱),抽象工厂模式(某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体、app图标、壁纸、...
NULL 博文链接:https://jacky-dai.iteye.com/blog/2297115
介绍:建造者模式又称为生成器模式,它是一种较为复杂、使用频率相对较低的创建型模式。建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品 定义:将一个复杂对象的构建与他的表示分离...