建造者模式

文章目录

建造者模式

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

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

实际案例: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)]
相关推荐
蔡蓝12 小时前
设计模式-建造者模式
服务器·设计模式·建造者模式
magic 24515 小时前
Java建造者模式(Builder Pattern)详解与实践
java·开发语言·建造者模式
冰茶_6 天前
建造者模式:优雅构建复杂对象
设计模式·微软·c#·.netcore·建造者模式·软件开发
码农秋6 天前
设计模式系列(07):建造者模式(Builder)
设计模式·建造者模式
孤独得猿11 天前
类的设计模式——单例、工厂以及建造者模式
单例模式·设计模式·建造者模式
暴躁哥14 天前
深入理解设计模式:工厂模式、单例模式
单例模式·设计模式·建造者模式·工厂模式
熙客19 天前
创建型:建造者模式
建造者模式
琢磨先生David25 天前
构建优雅对象的艺术:Java 建造者模式的架构解析与工程实践
java·设计模式·建造者模式
秋名RG1 个月前
深入解析建造者模式(Builder Pattern)——以Java实现复杂对象构建的艺术
java·开发语言·建造者模式
不当菜虚困1 个月前
JAVA设计模式——(十一)建造者模式(Builder Pattern)
java·设计模式·建造者模式