~~创建型-建造者模式
一:概念
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
二:优点
正常情况,多个业务调用建房相关接口,但是某一天,建房接口发生变化,我们所有相关调用都要修改,但是使用该模式,则只需要修改指挥者相关调用即可
实现业务类隔离
三:代码
package com.test.mode;
import lombok.Data;
/**
* 建造者模式
*/
public class BuilderModeTest {
public static void main(String[] args) {
//想要创建什么房子,直接调用指挥者,指挥者直接调用抽象类接口
//优点:建造者独立,易扩展(正常情况,多个业务调用建房相关接口,但是某一天,建房接口发生变化,我们所有相关调用都要修改,但是使用该模式,则只需要修改指挥者相关调用即可)
CommonHouseBuilder commonHouseBuilder = new CommonHouseBuilder();
House house=new HouseDerector(commonHouseBuilder).constractHouse();
System.out.println(house.getBaise()+","+house.getWall()+","+house.getRoofed());
}
}
@Data
class House {
private String baise;
private String wall;
private String roofed;
}
//建房抽象类
abstract class HouseBuilder {
protected House house=new House();
//将建造的流程写好,抽象的方法
public abstract House buildBasic();
public abstract House buildWall();
public abstract House roofed();
//建造
public House buildHouse(){
return house;
}
}
//普通房
class CommonHouseBuilder extends HouseBuilder {
@Override
public House buildBasic() {
System.out.println("common buildbasic");
house.setBaise("普通房--地基完成");
return house;
}
@Override
public House buildWall() {
System.out.println("common buildwall");
house.setWall("普通房--砌墙完成");
return house;
}
@Override
public House roofed() {
System.out.println("common roofed");
house.setRoofed("普通房--封顶完成");
return house;
}
}
//高楼
class HighHouseBuilder extends HouseBuilder {
@Override
public House buildBasic() {
System.out.println("highhouse buildbasic");
house.setBaise("高楼--地基完成");
return house;
}
@Override
public House buildWall() {
System.out.println("high buildwall");
house.setWall("高楼--砌墙完成");
return house;
}
@Override
public House roofed() {
System.out.println("high roofed");
house.setRoofed("高楼--封顶完成");
return house;
}
}
//指挥者
class HouseDerector {
HouseBuilder houseBuilder=null;
//构造器传入housebuilder
public HouseDerector(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
//setter 传入housebuilder
public void setHouseBuilder(HouseBuilder houseBuilder){
this.houseBuilder=houseBuilder;
}
//如何处理建造房子的流程,交给指挥者
public House constractHouse(){
houseBuilder.buildBasic();
houseBuilder.buildWall();
houseBuilder.roofed();
return houseBuilder.buildHouse();
}
}