`
jiq408694711
  • 浏览: 36582 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

创建型-Builder

 
阅读更多
package builder;
/**
 * @author jiq
 * 类型: Creational
 * 定义:是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),
 * 		对这个抽象过程的不同实现,可以构造出表现(属性)不同的对象。
 * 适用性:在以下情况使用生成器模式:
 * 	(1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
 * 	(2)当构造过程必须允许被构造的对象有不同的表示时。
 * 参与者:
 * 	(1)Builder:为创建一个Product对象的各个部件指定抽象接口。
 * 	(2)ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。
 * 					 定义并明确它所创建的表示。
 * 					 提供一个检索产品的接口
 * 	(3)Director:构造一个使用Builder接口的对象。
 * 	(4)Product:表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。 
 * 			 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。 
 * 协作: 客户创建Director对象,并用它所想要的Builder对象进行配置。
 * 		  一旦产品部件被生成,导向器就会通知生成器。
 * 		  生成器处理导向器的请求,并将部件添加到该产品中。
 * 		 客户从生成器中检索产品。
 */
/** "Product" */
class Pizza {
	private String dough = "";
	private String sauce = "";
	private String topping = "";

	public void setDough (String dough)     { this.dough = dough; }
	public void setSauce (String sauce)     { this.sauce = sauce; }
	public void setTopping (String topping) { this.topping = topping; }
	public void showPizza(){System.out.print(dough+","+sauce+","+topping);}
}

/** "Abstract Builder" */
abstract class PizzaBuilder {
	protected Pizza pizza;
	public Pizza getPizza() { return pizza; }
	public void createNewPizzaProduct() { pizza = new Pizza(); }

	public abstract void buildDough();
	public abstract void buildSauce();
	public abstract void buildTopping();
}

/** "ConcreteBuilder" */
class HawaiianPizzaBuilder extends PizzaBuilder {
	public void buildDough()   { pizza.setDough("cross"); }
	public void buildSauce()   { pizza.setSauce("mild"); }
	public void buildTopping() { pizza.setTopping("ham+pineapple"); }
}

/** ConcreteBuilder */
class SpicyPizzaBuilder extends PizzaBuilder {
	public void buildDough()   { pizza.setDough("pan baked"); }
	public void buildSauce()   { pizza.setSauce("hot"); }
  	public void buildTopping() { pizza.setTopping("pepperoni+salami"); }
}

/** "Director" */
class Waiter {
	private PizzaBuilder pizzaBuilder;
	public void setPizzaBuilder (PizzaBuilder pb) { pizzaBuilder = pb; }

	/**
	 * 将复杂产品的创建过程封装起来
	 * 产品的实现可以被替换
	 * 因为通过多个步骤创建对象,所以过程可以改变,这里和只有一个步骤的工厂模式不同
	 */
	public void constructPizza() {
		pizzaBuilder.createNewPizzaProduct();
		pizzaBuilder.buildDough();
		pizzaBuilder.buildSauce();
		pizzaBuilder.buildTopping();
	}
	public Pizza getPizza() { return pizzaBuilder.getPizza(); }
}

/** A customer ordering a Pizza. */
public class BuilderTest {
	public static void main(String[] args) {
		Waiter waiter = new Waiter();
		//创建两个不同的Pizza构造器
	    PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder();
	    PizzaBuilder spicy_pizzabuilder = new SpicyPizzaBuilder();

	    //根据Director的指导构建一个HawaiianPizza
	    waiter.setPizzaBuilder(hawaiian_pizzabuilder);
	    waiter.constructPizza();
	    Pizza hawaPizza = waiter.getPizza();
	    hawaPizza.showPizza();
	  	
	    //根据Director的指导构建一个SpicyPizza
	    waiter.setPizzaBuilder(spicy_pizzabuilder);
	    waiter.constructPizza();
	    Pizza spicyPizza = waiter.getPizza();
	    spicyPizza.showPizza();
	}
}

分享到:
评论

相关推荐

    前端项目-excel-builder.zip

    `excel-builder.js`通过创建一个内存中的Blob对象来解决这个问题。Blob对象可以存储任意类型的数据,包括二进制数据。当Excel文件构建完成后,库会将其转换为Blob,并通过创建一个隐藏的`<a>`标签和URL....

    前端开源库-builder-systemjs

    2. **配置**:创建一个配置文件(通常是 `build.config.js`),定义输入输出文件路径、转换规则以及需要的插件。 3. **构建**:然后,通过 Node.js 脚本运行构建命令,例如: ```javascript var Builder = ...

    Python库 | fuel-plugin-builder-3.0.0.tar.gz

    在实际应用中,开发人员可以通过解压fuel-plugin-builder-3.0.0.tar.gz文件,然后根据提供的指南进行安装和使用。这个压缩包包含了所有必要的源代码和资源,使得开发者能够迅速开始他们的插件开发之旅。对于那些在...

    PyPI 官网下载 | django-report-builder-1.1.tar.gz

    **PyPI 官网下载 | django-report-builder-1.1.tar.gz** `django-report-builder-1.1.tar.gz` 是一个在Python生态系统中常见的压缩包文件,它来源于Python的官方包仓库PyPI(Python Package Index)。这个包是针对...

    Laravel开发-laravel-builder-macros

    `laravel-builder-macros`是一个专为Laravel开发设计的库,旨在方便开发者在项目中集成和管理这些自定义宏。 Laravel的Eloquent ORM是它的一个核心组件,提供了简洁的语法来操作数据库。Builder是Eloquent ORM中...

    前端开源库-loader-builder-advance

    "loader-builder-advance"这个开源库显然专注于构建过程中的加载器构建,它旨在为前端开发者提供更高效、更灵活的资源处理能力。在本文中,我们将深入探讨这个开源库的核心概念、功能和使用场景,帮助你更好地理解和...

    Laravel开发-rule-builder

    在Laravel框架中,开发Rule Builder是为了更便捷地创建和管理自定义的验证规则。...在`rule-builder-master`项目中,你可以深入研究源代码,了解其内部工作原理,并将其应用于自己的Laravel项目中,以提升开发体验。

    CesiumTerrainBuilder及使用方法.zip

    CesiumTerrainBuilder是一款用于处理地形数据的...通过合理配置和使用,你可以创建出具有精细地形细节的3D地球应用,提升用户的浏览体验。在实际操作中,记得根据项目需求调整切片参数,以达到最佳的性能和视觉效果。

    Laravel开发-menu-builder

    `Laravel 5` 的 `menu-builder` 库就是这样一个工具,它允许开发者创建一个简单的数据库驱动的菜单管理系统。 ### 1. 安装与配置 首先,通过 Composer 来安装 `menu-builder` 包。在项目根目录下运行以下命令: `...

    设计模式-Builder模式demo

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许子类按照步骤构建复杂的对象。这种模式将对象的创建过程分离出来,使得同样的构造过程可以创建不同的表示,从而实现对象创建过程的解耦。 ...

    虚拟现实软件:VRP-BUILDER虚拟现实编辑器简介.pdf

    VRP-BUILDER虚拟现实编辑器是一款由中国视典数字科技研发的专业工具,专为三维美工设计,无需编程知识,即可创建高品质的虚拟现实场景。这款软件以其人性化的设计和高效的制作流程,大大降低了制作成本,提升了作品...

    23种设计模式的java实现-Builder

    Builder设计模式是创建型模式之一,主要解决复杂对象的构建问题,使得构建过程与表示分离。 Builder模式的核心思想是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式通常应用于...

    前端开源库-swint-builder-polymer

    在压缩包`swint-builder-polymer-master`中,通常会包含源码、示例、文档和其他相关资源,帮助开发者更好地理解和使用这个工具。 总的来说,Swint Builder Polymer是Swint框架与Polymer技术的完美结合,它为前端...

    FORM-Builder常用函数.doc

    FORM-Builder是Oracle EBS(Enterprise ...以上函数构成了FORM-Builder中强大的功能集合,让开发者能够创建出功能丰富的Oracle EBS自定义表单。理解和熟练运用这些函数是优化用户体验和提高业务流程效率的关键。

    创建型——Builder模式

    Builder模式是一种创建型设计模式,它提供了一种创建对象的灵活方式,将对象的构建过程与表示分离。这种模式在复杂对象的构造过程中特别有用,因为它允许我们通过不同的步骤来构造对象,而不会让客户端代码受到这些...

    Mbr-Builder-main.zip

    在本案例中,"Mbr-Builder-main.zip" 文件可能包含了一个构建MBR锁定型勒索软件的框架或脚本。 主引导记录(MBR)是计算机硬盘上的一个重要部分,负责在系统启动时加载操作系统。当MBR被恶意软件篡改时,攻击者可以...

    Laravel开发-blade-builder

    使用Blade Builder,开发者可以将动态Blade模板转换为静态HTML文件,这在创建SEO优化的网站或为离线环境准备内容时特别有用。静态文件的生成减少了服务器处理请求的压力,提高了页面加载速度。 3. **命令行接口**...

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

    ■实现Builder角色提供的接口,一步一步完成创建产品实例的过程。 ■在建造过程完成后,提供产品的实例。 ◆指导者(Director): 担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的...

    java-builder-generator

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许子类按照特定的步骤构造复杂对象。这种模式特别适用于当对象的构造过程较为复杂,或者需要支持多种构建方式时。 Builder模式的核心思想是...

    理解全新的Flash-Catalyst-CS5.5和Flash-Builder-4.5工作流程.docx

    在Flash Builder 4.5中,开发者可以添加业务逻辑、处理数据连接和Web服务,以及创建复杂的组件布局。 Flash Catalyst CS5.5 则是一个设计工具,它允许设计师无需编写代码就能将设计概念转化为交互式Flex组件。设计...

Global site tag (gtag.js) - Google Analytics