建造者模式

文章目录

建造者模式

建造者模式属于创造型的模式,用于创建复杂对象,将创建复杂对象的逻辑与对象本身表示分离出来,比如宝马这个产品,需要构建方向盘,轮胎,后备箱等等复杂逻辑操作,就可以使用建造者模式。

建造者主要是想把复杂对象的建造过程以及对象本身表达分离出来。将变化的代码从不变的代码中分离出来,起到代码的复用性。

实际案例:StringBuild 的源码

建造者模式的角色

  • 具体产品:一个具体产品的表示
  • 抽象建造:定义产品建造过程中相关的方法,
  • 具体建造:实现抽象建造,定义产品具体的建造。
  • 指挥者:用于建造对象,提供对象的返回,关注于产品建造的顺序,不关注产品的具体建造。

案例

代码

定义产品

java 复制代码
/**
 *  产品
 *
 * @author: Hui
 **/
@Data
public class House {

    private String bisic;
    private String wall;
    private String roof;

}

定义抽象建造者以及具体建造者

java 复制代码
/**
 *  抽象建造者
 *
 * @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 {


    @Override
    public void buildBasic() {
        System.out.println(" 普通房子打地基 5 米 ");
    }

    @Override
    public void buildWalls() {
        System.out.println(" 普通房子砌墙 10cm ");
    }

    @Override
    public void roofed() {
        System.out.println(" 普通房子封顶 ");
    }
}

package build;

/**
 *  具体建造者:高楼
 *
 * @author: Hui
 **/
public class HighHouse extends HouseBuild{


    @Override
    public void buildBasic() {
        System.out.println(" 高楼打地基 100 米 ");
    }

    @Override
    public void buildWalls() {
        System.out.println(" 高楼砌墙 ");
    }

    @Override
    public void roofed() {
        System.out.println(" 高楼封顶-透明顶 ");
    }
}

定义指挥者

java 复制代码
/**
 *  指挥者:用于返回创建对象,设置对象创建的顺序
 *
 * @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();
    }

客户端使用

java 复制代码
/**
 *  客户端
 *
 * @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)]
相关推荐
春风十里不如你95274 小时前
【设计模式】【创建型模式(Creational Patterns)】之建造者模式(Builder Pattern)
设计模式·建造者模式
oioihoii2 天前
建造者模式
c++·设计模式·c#·建造者模式
暗夜绿2 天前
【GoF23种设计模式】01_建造者模式
java·设计模式·建造者模式
夏旭泽2 天前
设计模式-建造者模式
设计模式·建造者模式
drebander2 天前
建造者模式Builder——优雅的使用姿势
java·算法·建造者模式
闲人一枚(学习中)4 天前
设计模式-创建型-建造者模式
java·设计模式·建造者模式
SchneeDuan5 天前
建造者模式
运维·服务器·建造者模式
小白不太白9505 天前
设计模式之建造者模式
java·设计模式·建造者模式
p-knowledge5 天前
建造者模式(Builder Pattern)
java·开发语言·建造者模式
捕鲸叉6 天前
C++创建型模式之生成器模式
开发语言·c++·建造者模式