第七讲 建造者模式

        一、什么是建造者模式

   Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

二、建造者模式的结构

三、建造者模式应用场景

- 对象的创建:Builder模式是为对象的创建而设计的模式

- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象

- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法

四、附代码:

4.1  pojo

package com.lxy.pojo;
public class House {
	private String wall;
	private String floor;
	private String houseTop;
	public String getWall() {
		return wall;
	}
	public void setWall(String wall) {
		this.wall = wall;
	}
	public String getFloor() {
		return floor;
	}
	public void setFloor(String floor) {
		this.floor = floor;
	}
	public String getHouseTop() {
		return houseTop;
	}
	public void setHouseTop(String houseTop) {
		this.houseTop = houseTop;
	}
}

4.2 普通建房子接口

package com.lxy.service;
import com.lxy.pojo.House;
public interface HouseBuilder {
	void floor();
	void houseTop();
	void wall();
	House getHouse();
}

4.3 实现建房子接口,还要建学校

package com.lxy.service;
import com.lxy.pojo.House;
public class SchoolBuilder implements HouseBuilder {
	
	  private House house=new House();
	@Override
	public void floor() {
		house.setFloor("学区房---地板");
	}
	@Override
	public void houseTop() {
		house.setHouseTop("学区房--房顶");
	}

	@Override
	public void wall() {
		house.setWall("学区房--墙");

	}

	@Override
	public House getHouse() {
		
		return house;
	}
}

 4.4 创建一个创建者,我们只需要传一个对象,让帮我们创建,否则,我们每次都要调用它的创建方法;4.5的测试案例一目了然

package com.lxy.service;
public class BuilderCreater {
	public void makeHouse(HouseBuilder houseBuilder){
		houseBuilder.floor();
		houseBuilder.wall();
		houseBuilder.houseTop();
	}
}

 4.5 测试案例

package com.lxy.service;
import com.lxy.pojo.House;
public class Client {
	public static void main(String[] args) {
		SchoolBuilder schoolBuilder = new SchoolBuilder();
		BuilderCreater builderCreater = new BuilderCreater();
		builderCreater.makeHouse(schoolBuilder);
		House house = schoolBuilder.getHouse();
		System.out.println(house.getFloor());
		System.out.println(house.getHouseTop());
		System.out.println(house.getWall());
	}
}

猜你喜欢

转载自blog.csdn.net/riju4713/article/details/81461570
今日推荐