建造者模式 -通俗讲解

Builder 模式的定义如下:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

看懂吗?搞不懂那些写定义的人为什么不写通俗点。通俗地说就是:将一个复杂对象的创建和部件的创建分开,如造艘船,构建船的对象和构建船的部件是分开的,是不是还是有点不懂,没事再听。打个比方作为客户,造船的时候,每个部件的建造过程,作为客户是看不到的,而客户看到的介绍是:船有船身,甲板,桅杆(船还没造呢)。所以客户看不到的就是部件的构建过程,客户看到的就是对象的构建过程。


那有什么用:

还是上面那个例子,客户想到了船的组成,而船可以造几种,也就是有不同的表示,有一天客户看到了这个船不满意了,说我想用木头,你们怎么用铁,所以,老板还是按照设计图纸在搞一遍。这个过程的价值就体现出来了。是的,不用再设计船了。

package designPatterns;
class Ship{
	private String body;
	private String board;
	private String mast;
	public String getBody() {
		return body;
	}
	public void setBody(String body) {
		this.body = body;
	}
	public String getBoard() {
		return board;
	}
	public void setBoard(String board) {
		this.board = board;
	}
	public String getMast() {
		return mast;
	}
	public void setMast(String mast) {
		this.mast = mast;
	}
	
}

interface ShipBuilder{//构建部件的构成在这里独立出来
	public void buildBody();
	public void buildBorad();
	public void buildMast();
	public Ship buildShip();
} 

class IronShipBuilder implements ShipBuilder{
	Ship ship=new Ship();
	public void buildBody() {
		// TODO Auto-generated method stub
		ship.setBody("船身正在造");
		System.out.println("船身造好了!");
	}

	public void buildBorad() {
		ship.setBoard("甲板正在造");
		System.out.println("甲板造好了");
		
	}

	public void buildMast() {
		// TODO Auto-generated method stub
		ship.setMast("桅杆正在造");
		System.out.println("桅杆造好了");
	}

	public Ship buildShip() {
		// TODO Auto-generated method stub
		System.out.println("铁船造好了");
		return ship;//把造完的船这个对象送出去。
	}
	
}

class ShipDirector{//这就是客户看到的设计蓝图
	public static Ship bulidShip(ShipBuilder sb){
		sb.buildBody();
		sb.buildBorad();
		sb.buildMast();
		return sb.buildShip();
	}
}

public class MyBuilder {
	public static void main(String[] args) {
		//这是我需要一艘船,
		//一艘铁船
		Ship ship = ShipDirector.bulidShip(new IronShipBuilder());
		//船就建好了,
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值