`
BestUpon
  • 浏览: 285079 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

创建者模式(Builder)

阅读更多

创建者模式:(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>在对象创建过程中会使用到系统中的其他的一些对象,这些对象在产品的创建
 过程中不易得到。

 

附件:包含了能直接运行的实例。

 

0
0
分享到:
评论

相关推荐

    设计模式 创建型模式 Builder模式(建造者)

    Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的...

    设计模式-创建者模式(Builder)

    本人理解的builder模式

    设计模式之创建模式Builder

    将一个复杂对象的构造与它的表示分离,使同样的构建 过程可以创建不同的表示,这样的设计模式被称为建造者模式。

    [创建型模式]设计模式之建造者模式(Builder Pattern)

    NULL 博文链接:https://jacky-dai.iteye.com/blog/2295399

    建造者模式(Builder Pattern)原理图

    建造者模式是一种创建型设计模式,用于简化复杂对象的创建过程。以下是建造者模式的关键概念和步骤: 1. **分离复杂对象的构建和表示**:建造者模式将一个复杂对象的构建过程与其最终的表示形式分离开来。这样做的...

    PHP设计模式(三)建造者模式Builder实例详解【创建型】

    本文实例讲述了PHP设计模式:建造者模式Builder。分享给大家供大家参考,具体如下: 1. 概述  在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求...

    php设计模式 Builder(建造者模式)

    php /** * 建造者模式 * * 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 */ class Product { public $_type = null; public $_size = null; public $_color = null; public function ...

    python实现常用的23种设计模式:含源代码、详细文档说明

    3、创建者模式【Builder】 4、原型模式【Prototype】 5、单例模式【Singleton】 二、、结构型模式 1、外观模式【Facade】 2、适配器模式【Adapter】 3、代理模式【Proxy】 4、装饰模式【Decorator】 5、桥接模式...

    java设计模式【之】建造者模式【源码】【场景:车辆组装】

    java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...

    用Java实现23种设计模式

    建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite ...

    PHP设计模式之建造者模式(Builder)原理与用法案例详解

    本文实例讲述了PHP设计模式之建造者模式(Builder)原理与用法。分享给大家供大家参考,具体如下: 这个建造者模式,我们也可以称为生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程...

    C#设计模式_设计模式_C#_

    建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite ...

    23种设计模式 (创建型,结构型,行为型)

    建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合...

    01-制造工具的工厂模式(1).html

    建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite...

    09-通过容器实现的外观模式(2).html

    建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite...

    C#设计模式(23种设计模式)

    建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合...

    00-初探 Laravel 和其中的设计模式(3).html

    建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite...

Global site tag (gtag.js) - Google Analytics