Builder 模式 —— 建造者模式(又译成生成器模式)的主要功能是构建复杂的产品,它是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
举个例子,打个生产电脑的比方,这里简单一点,假设生产电脑只需要 CUP、内存和显卡,现在需要生产宏基和戴尔两个品牌的电脑,不用设计模式的实现:
Acer.java
import java.util.ArrayList;
import java.util.List;
/**
* -----------------------------------------
* @描述 生产宏基笔记本电脑
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-4 <p>
* -----------------------------------------
*/
public class Acer{
protected List<String> parts = new ArrayList<String>();
//生产CPU
public void createCPU() {
parts.add("CUP: Intel 酷睿i3 2350M");
}
//生产内存
public void createMemory() {
parts.add("内存: 4GB DDR3 1333MHz");
}
//生产显卡
public void createDisplayCard() {
parts.add("显卡: NVIDIA GeForce GT 520M");
}
//显示产品信息
public void show(){
System.out.print("产品部件信息:");
for(String part : parts){
System.out.print(part + "\t");
}
}
}
Dell.java
import java.util.ArrayList;
import java.util.List;
/**
* -----------------------------------------
* @描述 生产戴尔笔记本电脑
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-4 <p>
* -----------------------------------------
*/
public class Dell{
protected List<String> parts = new ArrayList<String>();
//生产CPU
public void createCPU() {
parts.add("CUP: Intel 酷睿i7 3612QM");
}
//生产内存
public void createMemory() {
parts.add("内存: 8GB DDR3 1600MHz");
}
//生产显卡
public void createDisplayCard() {
parts.add("显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000");
}
//显示产品信息
public void show(){
System.out.print("产品部件信息:");
for(String part : parts){
System.out.print(part + "\t");
}
}
}
Client.java
/**
* -----------------------------------------
* @描述 客户端测试
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-4 <p>
* -----------------------------------------
*/
public class Client {
private static Acer acer = new Acer();
private static Dell dell = new Dell();
public static void main(String[] args){
/**
* 宏基
*/
acer.createCPU();
acer.createMemory();
acer.createDisplayCard();
acer.show();
/***************************************/
System.out.println();
/***************************************/
/**
* 戴尔
*/
dell.createCPU();
dell.createMemory();
dell.createDisplayCard();
dell.show();
}
}
仔细观察一下上面的实现,不难发现,不管是生产何种品牌的笔记本,在实现的时候,它们的步骤基本上都是一样的,都是生产电脑相应的部件并添加都电脑里面,在生产不同品牌电脑
的时候,都会重复处理这几个步骤,但是明显的是,这几个步骤都是稳定的或者说是一样的,只是每个步骤的具体实现不一样或者说是变化的,如果将这些变化的部分抽取出来,也就是
说如果将处理过程与具体的步骤的实现分离开来的话,这样就能够复用这些处理过程,而且这样一来就能很容易的做到在不同品牌电脑之间切换生产。
使用 Builder 模式的实现,如图:
Product.java
package pattern.builder;
import java.util.ArrayList;
import java.util.List;
/**
* -----------------------------------------
* @描述 抽象产品
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public abstract class Product {
protected List<String> parts = new ArrayList<String>();
//添加部件
public void add(String part){
parts.add(part);
}
//显示产品信息
public void show(){
System.out.print("产品部件信息:");
for(String part : parts){
System.out.print(part + "\t");
}
}
}
Acer.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 宏基笔记本
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class Acer extends Product{
//Do other things here
}
Dell.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 戴尔笔记本
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class Dell extends Product{
//Do other things here
}
Builder.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 抽象建造者
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public interface Builder {
//CUP
public void buildCPU();
//内存
public void buildMemory();
//显卡
public void buildDisplayCard ();
//最终产品
public Product getFinalResult();
}
AcerBuilder.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 宏基笔记本建造者
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class AcerBuilder implements Builder {
private Product product = new Acer();
@Override
public void buildCPU() {
product.add("CUP: Intel 酷睿i3 2350M");
}
@Override
public void buildMemory() {
product.add("内存: 4GB DDR3 1333MHz");
}
@Override
public void buildDisplayCard() {
product.add("显卡: NVIDIA GeForce GT 520M");
}
@Override
public Product getFinalResult() {
return product;
}
}
DellBuilder.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 戴尔笔记本建造者
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class DellBuilder implements Builder {
private Product product = new Dell();
@Override
public void buildCPU() {
product.add("CUP: Intel 酷睿i7 3612QM");
}
@Override
public void buildMemory() {
product.add("内存: 8GB DDR3 1600MHz");
}
@Override
public void buildDisplayCard() {
product.add("显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000");
}
@Override
public Product getFinalResult() {
return product;
}
}
Director.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 产品构建指导者
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class Director {
private Builder builder;
public Director(Builder builder){
this.builder = builder;
}
public void construct(){
builder.buildCPU();
builder.buildMemory();
builder.buildDisplayCard();
}
}
Client.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 客户端测试
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class Client {
private static Builder acerBuilder = new AcerBuilder(),
dellBuilder = new DellBuilder();
public static void main(String[] args){
System.out.print("宏基");
Director director = new Director(acerBuilder);
director.construct();
Product product = acerBuilder.getFinalResult();
product.show();
/***************************************/
System.out.println();
/***************************************/
System.out.print("戴尔");
director = new Director(dellBuilder);
director.construct();
product = dellBuilder.getFinalResult();
product.show();
}
}
相关推荐
java设计模式------------------------------------建造者模式
Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
JAVA-设计模式-创建型模式-建造者模式
-java常用设计模式-建造者模式是java中的一种创建型设计模式,它允许开发者通过一步一步地构建复杂对象来创建不同类型的对象。 建造者模式的定义 建造者模式是一种创建型设计模式,它允许开发者通过一步一步地构建...
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...
- 建造者模式:将复杂对象的构建与其表示分离,使同样的构建过程能创建不同的表示。 - 原型模式:通过复制已有对象来创建新对象。 2. 结构型设计模式: - 适配器模式:将两个不兼容的接口转换为可以一起工作的...
建造者模式(Builder)是Java设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。在Android开发中,这种模式尤其有用,因为Android组件如Activity、Fragment等的初始化过程通常...
### Java设计模式详解 #### 创建型模式 **1.1 工厂方法(Factory Method)** 工厂方法模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这使得一个类的实例化可以被推迟到其子类。这种模式在以下...
### Java设计模式的应用 #### 一、引言 在当今快速发展的软件开发领域,Java作为一门功能强大且灵活的语言,不仅拥有丰富的API资源,还能与强大的数据库系统无缝对接。这使得许多开发人员能够以模块化的形式构建...
建造者模式,是Java设计模式中的重要组成部分,它在软件工程中扮演着构造复杂对象的角色。这个模式的主要目的是将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。通过使用建造者模式,我们可以...
建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...
本资源主要介绍了JAVA设计模式的原则和23种设计模式的总结。设计模式是软件设计中的一种解决方案,能够使软件系统更加灵活、可维护和可扩展。本资源首先介绍了设计模式的六大原则,包括单一责任原则、开闭原则、里氏...
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
8. 建造者模式(BUILDERPATTERN):建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 此外,书中还提到了“六大设计原则”,这是设计模式背后的指导思想,包括: 1. 单一...
设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...
- **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **单例模式**:保证一个类仅有一个实例,并提供一个全局访问点。 - **原型模式**:通过复制已有对象来创建新对象,...
2. 创建型模式:包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。这些模式主要关注对象的创建过程,使得代码更加灵活,易于管理和测试。 3. 结构型模式:包括适配器模式、桥接模式、组合模式、...
- **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。适合于构建步骤复杂的对象。 - **单例模式**:保证一个类只有一个实例,并提供全局访问点。常用于配置中心、缓存管理等...
《Java设计模式》是刘伟教授的一本关于设计模式的教材,主要面向高等学校的学生和对Java编程有深入兴趣的开发者。设计模式是软件工程中的一种重要思想,它封装了在特定场景下的问题解决方案,可以提高代码的可读性、...