建造者模式--一种更好的方法去装配复杂的实例

试想可能有这样一种情况,公司要造一个机器人,老大决定把这个艰巨的任务交给你。

你就去做了,一步一步来:

先造头,

再造一个身子,

再造一个左手,

再造一个右手,

再造一个左脚,

再造一个右脚。

一段时间后你完成了任务,老大看你玩的十分的出色,就又让你去造一只猫,紧接着

你又去做了,一步一步来:

先造头,

再造一个身子,

再造一个左手,

再造一个右手,

再造一个左脚,

再造一个右脚。

你又完成了,突然之间发现你漏了一条尾巴!!

现实中,这种状况非常容易出现,要去生成一个内部比较复杂的类,很容易出现“漏”创建某一个部分的情况。

这时,建造者模式就能够很好的帮助我们解决这个问题。

当需要将一个复杂对象的勾践与它的表示分离,使得同样的勾践过程可以创建一个不同的表示的意图时,就可以使用建造者模式。

当使用了建造者模式后,用户就只需要指定需要搭建的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。

首先还是看下面的类图:



首先有一个Product产品类,这个可以随意,

接下来就是一个抽象的建造者Builder类,这个类主要是定义规范,创建各个部分的规范类

而两个concrete开头的就是创建类的具体类。

Director则是根据用户需求构建对象的指挥者类:

下面看代码:

Builder类:

package com.blog.anla.Builder;
/**
 * 抽象的建造者类,确定产品由两个部件组成
 * 以及得到产品的方法getResult
 * @author U-ANLA
 *
 */
public abstract class Builder {
	public abstract void buildPartA();
	public abstract void buildPartB();
	public abstract Product getResult();
}


Product类:

package com.blog.anla.Builder;

import java.util.ArrayList;
import java.util.List;

/**
 * 具体产品
 * @author U-ANLA
 *
 */
public class Product {
	List<String> parts = new ArrayList<String>();
	
	public void add(String part){
		parts.add(part);
	}
	
	public void show(){
		System.out.println("产品  已创建");
		for(int i = 0;i < parts.size();i++){
			System.out.println(parts.get(i));
		}
	}
}


ConcreteBuilder1类:

package com.blog.anla.Builder;
/**
 * 具体建造者类
 * @author U-ANLA
 *
 */
public class ConcreteBuilder1 extends Builder{

	private Product product = new Product();
	
	@Override
	public void buildPartA() {
		product.add("部件A");
	}

	@Override
	public void buildPartB() {
		product.add("部件B");
	}

	@Override
	public Product getResult() {
		return product;
	}

}


ConcreteBuilder2类:

package com.blog.anla.Builder;
/**
 * 具体建造者类
 * @author U-ANLA
 *
 */
public class ConcreteBuilder2 extends Builder{

	private Product product = new Product();
	
	@Override
	public void buildPartA() {
		product.add("部件X");
	}

	@Override
	public void buildPartB() {
		product.add("部件Y");
	}

	@Override
	public Product getResult() {
		return product;
	}

}


Director类:

package com.blog.anla.Builder;
/**
 * 指挥者类,用来指挥建造过程
 * @author U-ANLA
 *
 */
public class Director {
	public void construct(Builder builder){
		builder.buildPartA();
		builder.buildPartB();
	}
}

赠人玫瑰手留余香(oo)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值