建造者模式实现房屋建设

本文详细介绍了建造者模式在Java中的应用,包括产品(House)、Builder接口、具体建造者(如BuildLittleHouse和BuildBigHouse)、指挥者(Director)以及其优点,展示了如何通过这个模式逐步构建不同类型的房屋对象,实现对象创建的灵活性和细节控制。
摘要由CSDN通过智能技术生成

建造者模式(Builder Pattern)的核心在于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这个模式被用来解决当一个对象需要多个部分来一步步构建时,而且每个部分的构建复杂度不一,或者对象的构建需要遵循特定的顺序时的问题。通过建造者模式,可以让客户端不需要知道内部构建的细节。

建造者模式通常包含以下几个核心组成部分:

  1. 产品(Product):最终要构建的复杂对象。
  2. 建造者(Builder):接口声明了创建产品对象各个部分的方法。
  3. 具体建造者(Concrete Builder):实现Builder接口,提供构建过程的具体实现,并负责提供产品的最终实例。
  4. 指挥者(Director):负责安排已有模块的构建顺序,然后向Builder对象指挥构建过程,但它不涉及具体产品的信息。
  5. 客户端(Client):使用指挥者和建造者来创建一个对象。

使用建造者模式的优点包括:

  • 封装性好:用户可以不知道产品内部组成的细节,将产品本身与产品的创建过程解耦。
  • 建造者独立,易扩展:具体的建造者类之间独立,对系统的扩展有利。
  • 便于控制细节风险:由于具体的建造者是独立的,因此可以控制产品的构建过程,以减少构建错误的风险。

建造者模式的核心在于分步骤构建一个复杂对象,并允许用户只通过指定复杂对象的类型和内容就可以构建它们,隐藏了对象的创建细节和过程。

在Java中使用建造者设计模式来实现建房子的过程,可以分为几个步骤:定义房子(Product),定义建造房子的步骤(Builder接口),提供具体的建造者(ConcreteBuilder),指挥者(Director)来控制建造过程,以及最后由客户端(Client)来创建对象。

下面是一个简化的示例,展示如何实现这个模式:

1. 首先定义房子

/**
 * @author 曹见朋
 * @create 2024-02-25-9:39
 */
@Data
public class House {

    private String basic;
    private String walk;
    private String roof;

}

2. 其次定义抽象建造者

/**
 * @author 曹见朋
 * @create 2024-02-25-9:39
 */
public interface Build {

    void buildBasic();
    void buildWalk();
    void buildRoof();
    House getHouse();
}

3. 然后定义具体建造者

/**
 * @author 曹见朋
 * @create 2024-02-25-9:48
 */
public class BuildLittleHouse implements Build{

    private House house;

    public BuildLittleHouse() {
        this.house = new House();
    }

    @Override
    public void buildBasic() {

        System.out.println("建造小屋的地基...");
        house.setBasic("小屋地基");
    }

    @Override
    public void buildWalk() {
        System.out.println("建造小屋的墙体...");
        house.setWalk("小屋的墙体");
    }

    @Override
    public void buildRoof() {
        System.out.println("建造小屋的屋顶...");
        house.setRoof("小屋的屋顶");
    }

    @Override
    public House getHouse() {
        return this.house;
    }
}
/**
 * @author 曹见朋
 * @create 2024-02-25-10:04
 */
public class BuildBigHouse implements Build{

    private House house;

    public BuildBigHouse() {
        this.house=new House();
    }

    @Override
    public void buildBasic() {
        System.out.println("建造大房子的地基");
        house.setBasic("大房子的地基");

    }

    @Override
    public void buildWalk() {
        System.out.println("建造大房子的墙体");
        house.setBasic("大房子的墙体");
    }

    @Override
    public void buildRoof() {
        System.out.println("建造大房子的屋顶");
        house.setBasic("大房子的屋顶");
    }

    @Override
    public House getHouse() {
        return this.house;
    }
}

4. 定义指挥者

/**
 * @author 曹见朋
 * @create 2024-02-25-9:53
 */
public class Director {

    private Build build;

    public Director() {
    }

    public Director(Build build) {
        this.build = build;
    }

    public House constructHouse(){
        build.buildBasic();
        build.buildWalk();
        build.buildRoof();
        return build.getHouse();
    }
}

5. 定义客户端

/**
 * @author 曹见朋
 * @create 2024-02-25-9:55
 */
public class Client {

    public static void main(String[] args) {
        Build build = new BuildLittleHouse();
        Director director = new Director(build);
        House house = director.constructHouse();
        System.out.println(house);

        System.out.println("===================");

        BuildBigHouse buildBigHouse = new BuildBigHouse();
        Director director1 = new Director(buildBigHouse);
        House house1 = director.constructHouse();
        System.out.println(house1);
    }

}

6. 运行

建造小屋的地基...
建造小屋的墙体...
建造小屋的屋顶...
House(basic=小屋地基, walk=小屋的墙体, roof=小屋的屋顶)
===================
建造小屋的地基...
建造小屋的墙体...
建造小屋的屋顶...
House(basic=小屋地基, walk=小屋的墙体, roof=小屋的屋顶)

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值