声明:以下都是博主浅薄的经验之谈,欢迎大家学习交流
public class Main {
public static void main(String[] args) {
/**引入建造者模式的场景**/
/**1.客户端创建房子最普通方式是如下,如果每次要创建不同的房子的话,就必须类似这样进行创建*/
/**缺点:客户端的代码要不断的动,不利于维护**/
House house = new House();
house.setFloor("普通地板");
house.setWall("普通墙");
house.setRoof("普通房顶");
House h1 = new House();
h1.setFloor("中等地板");
h1.setWall("中等墙");
h1.setRoof("中等房顶");
/**2.增加了一个建造房子的工程队**/
/**缺点:**/
HouseBuilder commonBuilder = new CommonBuilder();
commonBuilder.makeFloor();
commonBuilder.makeRoof();
commonBuilder.makeWall();
House h2 = commonBuilder.getHouse();
System.out.println(h2);
/**3.增加一个管理者(指导工程队进行设计)【引入建造者模式】**/
/**对于后期如果要创建一个中等房子的话,只需要实现houseBuilder接口,创建出一个
MediumBuilderm,交给designer即可**/
/**分离了在客户端代码中去创建不同类别的House对象,代码数量动得少了**/
Designer designer = new Designer();
HouseBuilder builder = new CommonBuilder();
designer.designHouse(builder);
House h3 = builder.getHouse();
System.out.println(h3);
HouseBuilder mediumBuilder = new MediumBuiler();
designer.designHouse(mediumBuilder);
House h4 = mediumBuilder.getHouse();
System.out.println(h4);
}
}
public class House {
private String floor;
private String wall;
private String roof;
public String getFloor() {
return floor;
}
public void setFloor(String floor) {
this.floor = floor;
}
public String getWall() {
return wall;
}
public void setWall(String wall) {
this.wall = wall;
}
public String getRoof() {
return roof;
}
public void setRoof(String roof) {
this.roof = roof;
}
@Override
public String toString() {
return "House [floor=" + floor + ", wall=" + wall + ", roof=" + roof + "]";
}
}
public interface HouseBuilder {
public void makeFloor();
public void makeRoof();
public void makeWall();
public House getHouse();
}
public class CommonBuilder implements HouseBuilder{
private House house = new House();
@Override
public void makeFloor() {
house.setFloor("普通地板");
}
@Override
public void makeRoof() {
house.setRoof("普通房顶");
}
@Override
public void makeWall() {
house.setWall("普通墙壁");
}
/**
* 得到房子
* @return
*/
public House getHouse(){
return house;
}
}
public class MediumBuiler implements HouseBuilder {
private House house = new House();
@Override
public void makeFloor() {
house.setFloor("中等地板");
}
@Override
public void makeRoof() {
house.setRoof("中等房顶");
}
@Override
public void makeWall() {
house.setWall("中等墙");
}
@Override
public House getHouse() {
return house;
}
}
/**
* 描述:设计者里管理工程队来进行建造房子
*/
public class Designer {
public void designHouse(HouseBuilder houseBuilder){
houseBuilder.makeFloor();
houseBuilder.makeRoof();
houseBuilder.makeWall();
}
}
声明:以上都是博主浅薄的经验之谈,欢迎大家学习交流