创建者模式:(builder)
1、定义:创建者模式就是将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示,而且客户端
不用知道对象的构建细节。
2、原理:有五部分:组装类,抽象对象创建类,实现抽象对象创建类的具体创建类,抽象产品类,实现抽象产品类的具体创建产品类。
下面分别说明一下以上五部分:
--->需要组装的一个抽象产品类(整体上的宏观概念产品)Macrocosm.java
package org.bestupon.builder.products;
/**
* 本类是整体的一个产品接口类
* @author bestupon
*
*/
public interface Macrocosm {
/**
* 该方法用于创建该方法的产品
* 业务方法
*/
public String build();
/**
* 打印产品信息
* 辅助方法
*/
public void printInfo();
}
----->零部件产品抽象类(角色:抽象产品类):这里列举了四个产品,分别是FirstProduct.SecondProduct.ThridProduct.ForthProduct.都是interface。列举其中之一:
package org.bestupon.builder.products;
/**
* 用户零部件的第一个产品抽象类
* @author bestupon
*
*/
public interface FirstProduct {
public String build();
public void printInfo();
}
----->零部件产品的实现类(角色抽象产品的实现类):
package org.bestupon.builder.products.impl;
import org.bestupon.builder.products.FirstProduct;
public class FirstProductImpl implements FirstProduct {
public String build() {
return "创建了产品一";
}
public void printInfo() {
System.out.println(this.build());
}
}
---->整体宏观产品实现类:
package org.bestupon.builder.products.impl;
import org.bestupon.builder.products.Macrocosm;
public class MacrocosmImpl implements Macrocosm {
public String build() {
return "开始组装整体产品";
}
public void printInfo() {
System.out.println(this.build());
}
}
------>建造工厂类(角色:抽象对象创建类):
package org.bestupon.builder.factory;
import org.bestupon.builder.products.FirstProduct;
import org.bestupon.builder.products.ForthProduct;
import org.bestupon.builder.products.SecondProduct;
import org.bestupon.builder.products.ThirdProduct;
/**
* 生产一系列用于组装一个产品的产品
* @author bestupon
*
*/
public interface BuilderFactory {
public FirstProduct buildFirstProduct();
public SecondProduct buildSecondProduct();
public ThirdProduct builThirdProduct();
public ForthProduct buildForthProduct();
}
----->建造工厂的实现类(角色:抽象对象创建的实现类):
package org.bestupon.builder.factory.impl;
import org.bestupon.builder.factory.BuilderFactory;
import org.bestupon.builder.products.FirstProduct;
import org.bestupon.builder.products.ForthProduct;
import org.bestupon.builder.products.SecondProduct;
import org.bestupon.builder.products.ThirdProduct;
import org.bestupon.builder.products.impl.FirstProductImpl;
import org.bestupon.builder.products.impl.ForthProductImpl;
import org.bestupon.builder.products.impl.SecondProductImpl;
import org.bestupon.builder.products.impl.ThirdProductImpl;
/**
* 负责创建产品的类
* @author bestupon
*
*/
public class MacrocosmFactory implements BuilderFactory {
public ThirdProduct builThirdProduct() {
return new ThirdProductImpl();
}
public FirstProduct buildFirstProduct() {
return new FirstProductImpl();
}
public ForthProduct buildForthProduct() {
return new ForthProductImpl();
}
public SecondProduct buildSecondProduct() {
return new SecondProductImpl();
}
}
----->实现组装产品的组装类(角色:组装类)注意:本类是具体的类,不是抽象类或者接口。
package org.bestupon.builder.assemble;
import org.bestupon.builder.factory.BuilderFactory;
import org.bestupon.builder.products.FirstProduct;
import org.bestupon.builder.products.ForthProduct;
import org.bestupon.builder.products.Macrocosm;
import org.bestupon.builder.products.SecondProduct;
import org.bestupon.builder.products.ThirdProduct;
import org.bestupon.builder.products.impl.MacrocosmImpl;
/**
* 本类是为了不让客户端臃肿而设计的组装类。
* 是解决抽象工厂模式的弊端,客户端臃肿问题而设计的。
* @author bestupon
*
*/
public class Assemble {
private BuilderFactory factory;
public Assemble(BuilderFactory factory) {
this.factory = factory;
}
public Macrocosm buildMacrocosm(){
/**
* 创建产品一
*/
FirstProduct firstProduct = factory.buildFirstProduct();
firstProduct.build();
firstProduct.printInfo();
/**
* 产品二
*/
SecondProduct secondProduct = factory.buildSecondProduct();
secondProduct.build();
secondProduct.printInfo();
/**
* 产品三
*/
ThirdProduct thirdProduct = factory.builThirdProduct();
thirdProduct.build();
thirdProduct.printInfo();
/**
* 产品四
*/
ForthProduct forthProduct = factory.buildForthProduct();
forthProduct.build();
forthProduct.printInfo();
return new MacrocosmImpl();
}
}
----->客户端
package org.bestupon.builder.client;
import org.bestupon.builder.assemble.Assemble;
import org.bestupon.builder.factory.impl.MacrocosmFactory;
import org.bestupon.builder.products.Macrocosm;
public class Client {
public static void main(String args []) {
Assemble assemble = new Assemble(new MacrocosmFactory());
Macrocosm macrocosm = assemble.buildMacrocosm();
macrocosm.printInfo();
}
}
3、优点:和抽象工厂模式相比较,客户端不用负责产品的组装,而是把组装的的任务交给了组装类去完成,客户端只是负责
产品的调用。
4、缺点: 如果产品之间的差异非常大的话,需要编写多个创建者类才能实现。代码量增加了。
5、使用时机:需要同时创建出一系列相关的产品,但是这些产品可以构建成一个整体的产品,可以考虑使用
创建者模式。
1>需要生成的产品对象有复杂的内部结构。每一种内部成分本身可以是对象,
也可以是一个对象的一个组成成分。
2>需要生成的产品对象的属性相互依赖。
3>在对象创建过程中会使用到系统中的其他的一些对象,这些对象在产品的创建
过程中不易得到。
附件:包含了能直接运行的实例。
分享到:
相关推荐
设计模式-创建者模式(Builder) 创建者模式(Builder)是软件设计模式中的一种结构型模式,它将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。该模式允许用户可以只通过指定复杂对象...
Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的...
建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。这种模式的核心思想在于将对象的构建与表示分离,使得构建过程和不同表示可以独立变化,提高...
Builder模式通常包含四个主要角色:Product(产品),Builder(建造者),ConcreteBuilder(具体建造者)和Director(导演)。Product是被构建的对象,具有多种组成部件;Builder定义了构建产品的接口,而不涉及具体...
**建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...
4. **建造者模式(Builder Pattern)**:创建者模式的一个常见实现是建造者模式,它将对象的构建与表示分离,允许同一产品的不同表示。建造者模式通常包括Director(导演)类来指导构建过程,Product(产品)类,...
1. **简单创建者模式示例**:通过一个简单的例子,比如创建汽车对象,展示如何通过Builder接口和Concrete Builder类实现创建过程。 2. **产品类结构**:讲解产品类(如Car类)的定义,以及如何通过Builder接口来设置...
创建者模式(Builder Pattern),又称建造者模式,是一种常用的软件设计模式。它主要用于解决对象创建时的复杂性和灵活性问题。创建者模式的核心思想是将一个复杂的对象构建与其表示分离,使相同的构建过程可以创建...
【创建型模式】设计模式之建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是设计模式中的一个创建型模式,它提供了一种方法来分步骤构造复杂的对象,使得构造过程和表示分离,使得同样的构建过程可以...
创建者模式,也被称为构造器模式,是设计模式中的一种,属于创建型模式。它主要用来封装对象的创建过程,将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在C++中,创建者模式的实现通常...
创建者模式,也被称为构造器模式,是设计模式中的一种,属于对象创建型模式。它在软件工程中被广泛应用于复杂对象的构建,通过将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这个模式的...
其中,建造者模式属于创建型模式,主要用于解决构建复杂对象的问题。 ### 建造者模式解析 建造者模式的核心思想是将一个复杂的对象分解为多个简单的组成部分,然后通过一个构建者来组装这些部分。这样做的好处是...
Builder模式属于创建型设计模式,它的核心思想是将对象的创建过程与对象本身分离,使得同样的构建过程可以创建不同的表示。 在Java或其他面向对象语言中,生成器模式通常包括四个主要角色:产品(Product)、建造者...
在Java中,Builder模式通常包含四个主要角色:Product(产品),Builder(建造者),ConcreteBuilder(具体建造者)和Director(导演)。Product是被构建的对象,Builder定义了产品的构造接口,ConcreteBuilder实现...
3. 在产品创建过程中需要使用系统中的其他对象,且这些对象在创建过程中不易获取时,Builder模式可以封装这部分细节,使得创建过程更加清晰和可控。 #### 优点 - **内部表象独立变化**:Builder模式允许产品的内部...
Builder设计模式是一种软件设计模式,它允许我们分步骤构建复杂对象,通过将构造过程与对象的表示分离,使得相同的构造过程可以创建不同的表示。在Java或者其他面向对象编程语言中,Builder模式经常被用来提高代码的...
Builder设计模式是一种创建型设计模式,它提供了一种方法来分步骤构造复杂的对象,使得构建过程和表示分离,允许用户只关注对象的构建而无需关心具体实现细节。在Java或其他编程语言中,Builder模式通常用于创建那些...
建造者模式(Builder)是设计模式中的一种结构型模式,它允许我们分步骤构建复杂的对象,而无需暴露构造过程。这种模式将构造过程与对象的表示分离,使得同样的构造过程可以创建不同的表示。在C++中,建造者模式通常...
建造者模式(Builder Pattern)是一种创建型设计模式,允许使用多个简单的对象一步一步构建一个复杂的对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式的组成 产品...