> 文章列表 > 第七章 建造者模式

第七章 建造者模式

第七章 建造者模式


文章目录

  • 前言
  • 一、传统方式解决盖房子需求
    • 完整代码
    • 抽象房子类 AbstractHouse
    • 实现子类 普通房子
    • 实现子类 高楼大厦
    • 客户端盖房子
  • 二、引入建造者模式
    • 建造者模式的四个角色: 产品、抽象建造者、具体建造者、指挥者
    • 完整代码
    • House类 (产品角色)
    • 抽象父类(抽象建造者) HouseBuilder
    • 子类(具体建造者)CommonHouse / HighBuilding
    • 指挥者 HouseDirector
    • 客户端 Client
  • 三、JDK中的建造者模式 StringBuilder
  • 四、建造者模式的注意事项和细节

前言

第七章 建造者模式


一、传统方式解决盖房子需求

第七章 建造者模式

完整代码

抽象房子类 AbstractHouse

package tanchishell.SJMS.builder;public abstract class AbstractHouse {//打地基public abstract void buildBasic();//砌墙public abstract void buildWalls();//封顶public abstract void roofed();//建房子public void build() {buildBasic();buildWalls();roofed();}
}

实现子类 普通房子

package tanchishell.SJMS.builder;public class CommonHouse extends AbstractHouse{@Overridepublic void buildBasic() {System.out.println(" 普通房子开始打地基 ");}@Overridepublic void buildWalls() {System.out.println(" 普通房子砌墙 10 cm  ");}@Overridepublic void roofed() {System.out.println(" 普通房子盖普通屋顶  ");}
}

实现子类 高楼大厦

package tanchishell.SJMS.builder;public class HighBuilding extends AbstractHouse {@Overridepublic void buildBasic() {System.out.println("  高楼大厦打地基  ");}@Overridepublic void buildWalls() {System.out.println("  高楼大厦砌墙 20  cm  ");}@Overridepublic void roofed() {System.out.println("  高楼大厦的透明屋顶  ");}
}

客户端盖房子

package tanchishell.SJMS.builder;public class Client {public static void main(String[] args) {CommonHouse commonHouse = new CommonHouse();commonHouse.build();/** 输出*  普通房子开始打地基*  普通房子砌墙 10 cm*  普通房子盖普通屋顶*/}
}

第七章 建造者模式

二、引入建造者模式

第七章 建造者模式

建造者模式的四个角色: 产品、抽象建造者、具体建造者、指挥者

第七章 建造者模式
第七章 建造者模式
第七章 建造者模式

完整代码

House类 (产品角色)

package tanchishell.SJMS.builder2;//产品->Product
public class House {private String baise;private String wall;private String roofed;public String getBaise() {return baise;}public void setBaise(String baise) {this.baise = baise;}public String getWall() {return wall;}public void setWall(String wall) {this.wall = wall;}public String getRoofed() {return roofed;}public void setRoofed(String roofed) {this.roofed = roofed;}
}

抽象父类(抽象建造者) HouseBuilder

package tanchishell.SJMS.builder2;// 抽象的建造者
public abstract class HouseBuilder {//组合房子,同生共死House house = new House();//打地基public abstract void buildBasic();//砌墙public abstract void buildWalls();//封顶public abstract void roofed();//建房子public House buildHouse() {return house;}//    //更换房子的创建规模 该场景暂不支持
//    public House UpdateHouse(House house2){
//        house = house2;
//
//        return house;
//    }
}

子类(具体建造者)CommonHouse / HighBuilding

package tanchishell.SJMS.builder2;public class CommonHouse extends HouseBuilder{@Overridepublic void buildBasic() {System.out.println("  普通房子打地基  ");}@Overridepublic void buildWalls() {System.out.println("  普通房子砌墙 10 cm  ");}@Overridepublic void roofed() {System.out.println("  普通房子的普通屋顶  ");}
}
package tanchishell.SJMS.builder2;public class HighBuilding extends HouseBuilder {@Overridepublic void buildBasic() {System.out.println("  高楼大厦打地基  ");}@Overridepublic void buildWalls() {System.out.println("  高楼大厦打砌墙 20 cm  ");}@Overridepublic void roofed() {System.out.println("  高楼大厦的透明屋顶  ");}
}

指挥者 HouseDirector

package tanchishell.SJMS.builder2;public class HouseDirector {//组合 抽象建造者HouseBuilder houseBuilder = null;//构造器传入 houseBuilderpublic HouseDirector(HouseBuilder houseBuilder) {this.houseBuilder = houseBuilder;}//通过 setter 传入 houseBuilderpublic void setHouseBuilder(HouseBuilder houseBuilder) {this.houseBuilder = houseBuilder;}//如何处理建造房子的流程,交给指挥者public House constructHouse() {houseBuilder.buildBasic();houseBuilder.buildWalls();houseBuilder.roofed();return houseBuilder.buildHouse();}
}

客户端 Client

package tanchishell.SJMS.builder2;public class Client {public static void main(String[] args) {HouseDirector houseDirector = new HouseDirector(new CommonHouse());//返回产品 普通房子House house = houseDirector.constructHouse();System.out.println("-----------------指挥者更换产品  -----------------");//指挥者更换产品houseDirector.setHouseBuilder(new HighBuilding());//返回产品 高楼大厦House house1 = houseDirector.constructHouse();}
}

三、JDK中的建造者模式 StringBuilder

第七章 建造者模式
第七章 建造者模式
第七章 建造者模式
第七章 建造者模式
第七章 建造者模式
第七章 建造者模式
第七章 建造者模式

四、建造者模式的注意事项和细节

第七章 建造者模式
第七章 建造者模式