对Java生成器模式或建造者模式(Builder)的理解

假如我想请2个施工队建2个不同的房子,因为怕麻烦,所以,我仅给了他们一个相同格式的建造清单。

第1个清单写着:

①我需要贵方帮忙建造一个房子,要求如下:

②要求建造的房子的大小:100

③要求建造的房子的卫生间数量:2

④要求建造的房子的卧室数量:2

第2个清单写着:

①我需要贵方帮忙建造一个房子,要求如下:

②要求建造的房子的房子大小:113

③要求建造的房子的卫生间数量:3

④要求建造的房子的卧室数量:3

那么我就是指导者Director,这个建设清单就是Builder,两个施工队(team1和team2)就是具体的建造者,最终我得到了产品Product。当我又想请施工队帮我建2个厂房,我给他们一个不同的清单就好了。

问题来了,整个事情应该如何进行

我发了2个建造清单,2个施工队看到了建造清单的要求,提炼出了我要求的Product关键词(房子大小、卫生间数量和卧室数量),然后制作出效果图发给我,我再通知他们施工。

因此我们需要6个文件

1. 指导者Director.java,指导者要下建造的命令,因此需要1个GotoBuild方法。

2. 建设清单Builder.java,要求施工队要做的动作。

3. 2个施工队team1.java和team2.java,这2个完成实际的建造工作。

4. 产品Product的House.java。

5. 主Main.java

Main.java代码如下:

package MyBuilder;
public class Main
{
    public static void main(String[] args)
    {
    	House house = new House();
    	team1 T1 = new team1(house);
    	Director director1 = new Director(T1);
    	House product1 = director1.GotoBuild();
    	System.out.println("面积::"+product1.area);
    	System.out.println("卧室数::"+product1.bedroom);
    	System.out.println("卫生间数::"+product1.toilet);
    	
    	team2 T2 = new team2(house);
    	Director director2 = new Director(T2);
    	House product2 = director2.GotoBuild();
    	System.out.println("面积::"+product2.area);
    	System.out.println("卧室数::"+product2.bedroom);
    	System.out.println("卫生间数::"+product2.toilet);
    }
}

Main的逻辑是:将Product关键词(House类)给team1,team1将效果图给Director,Director再通知team1施工(GotoBuild方法)

Director.java代码如下:

package MyBuilder;
public class Director{
	private Builder builder;
	private House house;
	public Director(Builder builder) {
		this.builder = builder;
	}
	public House GotoBuild() {
		house = builder.createHouse();
		return house;
	}
}

Director通过GotoBuild方法下建造的命令。

Builder.java代码如下:

package MyBuilder;
public interface Builder{
	public void createArea();
	public void createBedroom();
	public void createToilet();
	public House createHouse();
}

建设清单Builder指定了几个动作:建造1个房子createHouse,建造卧室,建造卫生间,限定面积。

team1.java代码如下:

package MyBuilder;
public class team1 implements Builder{
	private House house;
	public team1(House house) {
		this.house = house;
	}
	public void createArea() {
		house.area = 100;
	}
	public void createBedroom() {
		house.bedroom = 2;
	}
	public void createToilet() {
		house.toilet = 3;
	}
	public House createHouse() {
		createArea();
		createBedroom();
		createToilet();
		return house;
	}
}

team1根据Builder的要求建造房子。

team2.java代码如下:

package MyBuilder;
public class team2 implements Builder{
	private House house;
	public team2(House house) {
		this.house = house;
	}
	public void createArea() {
		house.area = 113;
	}
	public void createBedroom() {
		house.bedroom = 3;
	}
	public void createToilet() {
		house.toilet = 4;
	}
	public House createHouse() {
		createArea();
		createBedroom();
		createToilet();
		return house;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力不期待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值