建造者模式Builder Pattern

原创 2015年11月18日 20:22:38

建造者模式Builder Pattern

       建造者模式(Builder Pattern)强调的是将一个复杂对象的创建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式描述的是如何一步一步地创建一个复杂的对象,它允许用户通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

建造者模式结构图:

Builder表示抽象建造者,它为创建一个Product对象的各个部件指定抽象接口;

ConcreteBuilder表示具体建造者,它实现了Builder接口,用于构造和装配产品的各个部件,在其中定义并明确它所创建的产品,并返回产品的接口;

Directior表示指挥者,它用于构建一个实现builder接口的对象;

Product表示产品的角色,它是被构建的复杂对象,具体建造者创建改产品的内部表示并定义它的装配过程。


建造者与抽象工厂模式和相似,但是Builder返回一个完整的产品,而AbstractFactory返回的是一系列相关的产品;在AbstractFactory中客户生自己要用的对象,而在builder中客户指导director类如何去生成对象。

建造模式之游戏人物角色

product:Actor

package Product;

public class Actor {
	private String type;
	private String sex;
	private String face;
	private String constume;
	private String hairStyle;
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getFace() {
		return face;
	}
	public void setFace(String face) {
		this.face = face;
	}
	public String getConstume() {
		return constume;
	}
	public void setConstume(String constume) {
		this.constume = constume;
	}
	public String getHairStyle() {
		return hairStyle;
	}
	public void setHairStyle(String hairStyle) {
		this.hairStyle = hairStyle;
	}

}
Builder:ActorBuilder
package Builder;

import Product.Actor;

public abstract class ActorBuilder {

	protected Actor actor=new Actor();
	public abstract void builderType();
	public abstract void builderSex();
	public abstract void builderFace();
	public abstract void builderCostume();
	public abstract void builderHairStyle();
	
	public Actor createActor(){
		return actor;
	}
}
ConcrteBuilder:HeroBuilder

package ConcreteBuilder;

import Builder.ActorBuilder;

public class HeroBuilder extends ActorBuilder {

	@Override
	public void builderCostume() {
		actor.setConstume("盔甲");
	}

	@Override
	public void builderFace() {
		actor.setFace("英俊");
	}

	@Override
	public void builderHairStyle() {
		actor.setHairStyle("飘逸");
	}

	@Override
	public void builderSex() {
		actor.setSex("男");
	}

	@Override
	public void builderType() {
		actor.setType("英雄");
	}
}
ConcreteBuilder:AngleBuilder

package ConcreteBuilder;

import Builder.ActorBuilder;

public class AngleBuilder extends ActorBuilder {

	@Override
	public void builderCostume() {
		actor.setConstume("白裙");
	}

	@Override
	public void builderFace() {
		actor.setFace("漂亮");
	}

	@Override
	public void builderHairStyle() {
		actor.setHairStyle("披肩长发");
	}

	@Override
	public void builderSex() {
		actor.setSex("女");
	}

	@Override
	public void builderType() {
		actor.setType("天使");
	}
}
ConcreteBuilder:GhostBuilder

package ConcreteBuilder;

import Builder.ActorBuilder;

public class GhostBuilder extends ActorBuilder {

	@Override
	public void builderCostume() {
		actor.setConstume("黑衣");
	}

	@Override
	public void builderFace() {
		actor.setFace("丑陋");
	}

	@Override
	public void builderHairStyle() {
		actor.setHairStyle("光头");
	}

	@Override
	public void builderSex() {
		actor.setSex("妖");
	}

	@Override
	public void builderType() {
		actor.setType("魔鬼");
	}
}

测试类

package Test;

import Builder.ActorBuilder;
import ConcreteBuilder.AngleBuilder;
import Director.ActorController;
import Product.Actor;

public class Test {
	public static void main(String args[]){
		ActorController ac=new ActorController();
		ActorBuilder ab;
		ab=new AngleBuilder();
		Actor angle;
		angle=ac.constract(ab);
		System.out.println(angle.getType()+"的外观");
		System.out.println("性别:"+angle.getSex());
		System.out.println("面容:"+angle.getFace());
		System.out.println("服装:"+angle.getConstume());
		System.out.println("发型:"+angle.getHairStyle());
	}
}

测试结果:

优点:

1:将复杂产品的创建步骤分解在不同的方法中,使创建过程更加清晰,能够更精准的控制复杂产品的产生过程



Java实现(04)——建造者模式(Builder Pattern)

建造者模式一步一步地通过简单的对象创建复杂的对象。 本例介绍快餐店中的快餐,快餐有汉堡和饮料,汉堡分为蔬菜汉堡和肌肉汉堡,饮料分为百事和可口可乐。汉堡需要盒子来装,可乐需要瓶子。通过创建一个Meal类...
  • WAN_EXE
  • WAN_EXE
  • 2016年12月06日 09:22
  • 423

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

建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端压根不用知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者...
  • yanbober
  • yanbober
  • 2015年04月28日 16:38
  • 4495

JAVA设计模式之 建造者模式【Builder Pattern】

一、概述 二、适用
  • l416112167
  • l416112167
  • 2014年10月31日 01:15
  • 3602

【java设计模式】之 建造者(Builder)模式

我们还是举上一节的例子:生产汽车。上一节我们通过模板方法模式控制汽车跑起来的动作,那么需求是无止境的,现在如果老板又增加了额外的需求:汽车启动、停止、鸣笛引擎声都由客户自己控制,他想要什么顺序就什么顺...
  • eson_15
  • eson_15
  • 2016年05月06日 08:59
  • 5069

浅谈JAVA设计模式之——建造者模式(Builder)

一、概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2.当构造过程必须允许被...
  • l1028386804
  • l1028386804
  • 2015年05月02日 21:22
  • 9808

软件设计模式——建造者模式(Builder)

定义与结构 GOF 给建造模式的定义为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这句话说得很抽象,不好理解,其实它的意思可以理解为:将构造复杂对象的过程和组成对象的...
  • Jungle_hello
  • Jungle_hello
  • 2016年04月24日 16:51
  • 538

(二十三)建造者模式(Builder Pattern)

   定义:Separate the construction of a complex object from its representation so that the same constru...
  • lyalei
  • lyalei
  • 2018年02月13日 21:49
  • 2

建造者模式——Builder Pattern

建造者模式的本质:分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责装配)。从而构造出复杂的对象:这个模式的适用于:某个对象的构建过程复杂的情况下使用。由于实现了构建和...
  • qq_28663043
  • qq_28663043
  • 2017年02月10日 21:35
  • 290

PHP建造者模式(Builder Pattern)

/*------------------------------------------------ *  Summary: PHP Builder Pattern *  Author: fanyh ...
  • purefy
  • purefy
  • 2009年08月31日 13:01
  • 129

建造者模式-Builder Pattern

基本概念 建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,又叫做生成器模式。建造者模式将一个产品的内部表象与产品的生产过程分割开来,从而可以使一个建造过程生成具有不...
  • u014738140
  • u014738140
  • 2015年07月28日 12:54
  • 570
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:建造者模式Builder Pattern
举报原因:
原因补充:

(最多只允许输入30个字)