建造者模式笔记

    科技2023-10-02  100

    建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示 建造者模式的4个角色: 1. Product(产品) 2. Builder(抽象构建者):创建一个产品Product对象的各个部件指定的接口/抽象类 3. ConcreteBuilder(具体构建者):实现接口,构建和装配各个部件 4. Director(指挥者):构建一个使用Builder接口的对象。主要用于创建一个复杂的对象,主要有两个作用: 1. 隔离客户和产品对象的生产过程 2. 负责控制产品对象的生产过程

    1.创建一个指挥者,指挥者用于指挥建造产品的流程,流程对于某大类下的各种产品是一致的 2.创建一个建造者,该建造者建造的产品是某大类下特定的产品,比如房子中的别墅,汽车中的劳斯莱斯 3.指挥者通过指挥建造者去建造特定的产品,所以只需要创建一个指挥者并调用其方法,而不需要知道具体的产品建造流程

    代码实现:

    /** * 产品,Product */ public class House { private String basic; private String wall; private String roofed; public String getBasic() { return basic; } public void setBasic(String basic) { this.basic = basic; } 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; } } /** * 抽象的建造者 */ public abstract class HouseBuilder { //创建产品对象 protected House house = new House(); //建造流程的抽象方法 public abstract void buildBasic(); public abstract void buildWall(); public abstract void buildRoof(); //返回建造好的房子 public House buildHouse(){ return house; } } public class CommonHouse extends HouseBuilder{ @Override public void buildBasic() { System.out.println("普通房子打地基"); house.setBasic("普通房子的地基"); } @Override public void buildWall() { System.out.println("普通房子砌墙"); house.setWall("普通房子的墙"); } @Override public void buildRoof() { System.out.println("普通房子盖房顶"); house.setRoofed("普通房子的屋顶"); } } /** * 指挥者,这里动态地指定建造流程,返回产品 **/ public class HouseDirector { HouseBuilder houseBuilder = null; //方法1. 通过构造器传入建造者对象 public HouseDirector(HouseBuilder houseBuilder){ this.houseBuilder = houseBuilder; } //方法2. 通过setter传入建造者对象 public void setHouseBuilder(HouseBuilder houseBuilder) { this.houseBuilder = houseBuilder; } //如何处理建造房子的流程,交给指挥者 public House constructHouse(){ houseBuilder.buildBasic(); houseBuilder.buildWall(); houseBuilder.buildRoof(); return houseBuilder.buildHouse(); } } public class Client { public static void main(String[] args) { //盖普通房子 CommonHouse commonHouse = new CommonHouse(); //准备建造房子的指挥者 HouseDirector houseDirector = new HouseDirector(commonHouse); //完成盖房子,返回产品 House house = houseDirector.constructHouse(); } } 建造者模式在当创建复杂对象时推荐使用,即如果一个对象有很多成员变量需要赋值,则推荐使用建造者模式

    建造者模式变种:

    参考:1. https://blog.csdn.net/bicheng4769/article/details/80988996 2. https://www.jianshu.com/p/afe090b2e19c public class Person { private int id; private final String name; private final String gender; private Date birth; private String job; private double height; private double weight; private String address; private Person(Builder builder) { this.name = builder.name; this.gender = builder.gender; this.birth = builder.birth; this.job = builder.job; this.height = builder.height; this.weight = builder.weight; this.address = builder.address; } public static class Builder{ private final String name; private final String gender; private Date birth; private String job; private double height; private double weight; private String address; public Builder(String name,String gender) { this.name = name; this.gender = gender; } public Builder birth(Date birth){ this.birth = birth; return this; } public Builder job(String job){ this.job = job; return this; } public Builder height(double height){ this.height = height; return this; } public Builder weight(double weight){ this.weight = weight; return this; } public Builder address(String address){ this.address = address; return this; } public Person build(){ return new Person(this); } } } 创建Person对象时: Person person = new Person.Builder("jarvis","male") .height(178).weight(61).job("程序员") .build();
    Processed: 0.009, SQL: 9