黑马程序员——设计模式——建造者模式

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

使用场景:如果一个事物基本流程不变,但是里面具体实现的方法总是变化则使用建造者模式

优点:各个模块之间互相不影响,容易扩展


组成

1.Builder(抽象建造者)抽象的方法

2.ConcreteBuilder(具体建设者)具体的方法

3.Product(产品类)复杂对象

4.Director(导演类)调用建造者建造复杂对象

个人总结本人的创造习惯

1.创建复杂对象,各种属性和方法

2.创建抽象建造者,根据复杂对象创建(一般抽象或者接口)

3.创建具体建造者(实现接口,或者继承抽象类)

4.编写建造者创建的产品类导演类

问题描述建造一个房子,有窗户,门,地板,有好房子,和坏房子之分


1.产品类Product

//产品类
//房子
class House{
	//具体属性门,窗,地板
	private String door;
	private String wimdows;
	private String floor;
	//产品类特有方法
	//设置门
	public void setDoor(String door) {
		this.door = door;
	}
	//设置窗
	public void setWimdows(String wimdows) {
		this.wimdows = wimdows;
	}
	//设置地板
	public void setFloor(String floor) {
		this.floor = floor;
	}
	//显示房子
	public void show(){
		System.out.println("门:"+door);
		System.out.println("窗:"+wimdows);
		System.out.println("地板:"+floor);
	}
}


2.抽象建造者Builder

//Builder
//抽象建造者
//建造房子
abstract class MakeHouse{
	public abstract void makeDoor();//建造门
	public abstract void makeWindows();//建造窗
	public abstract void makeFloor();//建造地板
	public abstract House getHouse();//返回产品
}


3.具体建造者ConcreteBuilder

//ConcreteBuilder
//具体建造者
//建造好房子
class MakeGoodHouse extends MakeHouse{
	private House h = new House();//具体产品
	
	public void makeDoor() {//建造豪华门
		h.setDoor("好门");
	}

	public void makeWindows() {	//建造豪华窗	
		h.setWimdows("好窗户");
	}

	public void makeFloor() {//建造豪华地板
		h.setFloor("好地板");
	}

	public House getHouse() {//返回好房子
		return h;
	}
}
//建造坏房子 
class MakeBadHouse extends MakeHouse{

	private House h = new House() ;//坏房子产品
	
	public void makeDoor() {//建造破门	
		h.setDoor("破门");
	}
	
	public void makeWindows() {//建造破窗
		h.setWimdows("破窗户");
	}
	
	public void makeFloor() {//建造摸地板
		h.setFloor("破地板");
	}

	public House getHouse() {//返回破房子
		return h;
	}
}


4.创建导演类Director

//构造一个使用Builder接口的对象
//Director
//导演类,利用抽象建造者生成房子对象
class Director{
	private MakeHouse builder;//抽象建造者
	//返回好房子方法
	public House getGoodHouse(){
		this.builder =  new MakeGoodHouse();//向上转型,好房子建造者
		builder.makeDoor();
		builder.makeWindows();
		builder.makeFloor();
		return builder.getHouse();//返回好房子
	}
	//返回坏房子方法
	public House getBadHouse(){
		this.builder =  new MakeBadHouse();//向上转型,坏房子
		builder.makeDoor();
		builder.makeWindows();
		builder.makeFloor();
		return builder.getHouse();//返回坏房子
	}
}

测试类

public class Main {

	public static void main(String[] args) {

		Director d = new Director();
		House good = d.getGoodHouse();
		good.show();
		
		House bad = d.getBadHouse();
		bad.show();
	}

}


输出结果

窗:好窗户
地板:好地板
门:破门
窗:破窗户
地板:破地板





你可能感兴趣的:(建造者模式)