文章目录
- 建造者模式
- 建造者模式的角色
- 案例
- 代码
- 定义产品
- 定义抽象建造者以及具体建造者
- 定义指挥者
- 客户端使用
- 输出结果
建造者模式
建造者模式属于创造型的模式,用于创建复杂对象,将创建复杂对象的逻辑与对象本身表示分离出来,比如宝马这个产品,需要构建方向盘,轮胎,后备箱等等复杂逻辑操作,就可以使用建造者模式。
建造者主要是想把复杂对象的建造过程以及对象本身表达分离出来。将变化的代码从不变的代码中分离出来,起到代码的复用性。
实际案例:StringBuild 的源码
建造者模式的角色
- 具体产品:一个具体产品的表示
- 抽象建造:定义产品建造过程中相关的方法,
- 具体建造:实现抽象建造,定义产品具体的建造。
- 指挥者:用于建造对象,提供对象的返回,关注于产品建造的顺序,不关注产品的具体建造。
案例
代码
定义产品
/*** 产品** @author: Hui**/
@Data
public class House {private String bisic;private String wall;private String roof;}
定义抽象建造者以及具体建造者
/*** 抽象建造者** @author: Hui**/
public abstract class HouseBuild {private House house = new House();public abstract void buildBasic();public abstract void buildWalls();public abstract void roofed();public House buildHouse(){return house;}}
/*** 具体建造者:普通房子** @author: Hui**/
public class CommonHouse extends HouseBuild {@Overridepublic void buildBasic() {System.out.println(" 普通房子打地基 5 米 ");}@Overridepublic void buildWalls() {System.out.println(" 普通房子砌墙 10cm ");}@Overridepublic void roofed() {System.out.println(" 普通房子封顶 ");}
}package build;/*** 具体建造者:高楼** @author: Hui**/
public class HighHouse extends HouseBuild{@Overridepublic void buildBasic() {System.out.println(" 高楼打地基 100 米 ");}@Overridepublic void buildWalls() {System.out.println(" 高楼砌墙 ");}@Overridepublic void roofed() {System.out.println(" 高楼封顶-透明顶 ");}
}
定义指挥者
/*** 指挥者:用于返回创建对象,设置对象创建的顺序** @author: Hui**/
public class HouseDirector {//聚合抽象建造者private HouseBuild houseBuild;//使用构造方法来设置抽象建造者public HouseDirector(HouseBuild houseBuild){this.houseBuild = houseBuild;}//使用 set 方法来设置抽象建造者public void setHouseBuild(HouseBuild houseBuild){this.houseBuild = houseBuild;}//提供返回产品对象的方法。public House buildHouse(){houseBuild.buildBasic();houseBuild.buildWalls();houseBuild.roofed();return houseBuild.buildHouse();}
客户端使用
/*** 客户端** @author: Hui**/
public class Client {public static void main(String[] args) {//建造普通房子System.out.println("建造普通房子");HouseDirector houseDirector = new HouseDirector(new CommonHouse());House house = houseDirector.buildHouse();
// System.out.println(house);System.out.println("------------------------------");//建造高楼System.out.println("建造高楼");houseDirector.setHouseBuild(new HighHouse());House house1 = houseDirector.buildHouse();
// System.out.println(house1);}}
输出结果
d(new HighHouse());
House house1 = houseDirector.buildHouse();
// System.out.println(house1);
}
}
### 输出结果[外链图片转存中...(img-fqB3aKVI-1720330094469)]