设计模式 建造者模式(笔记)

本文介绍了建造者模式的应用,通过实例展示了如何使用建造者模式来构建不同类型的房屋,包括地基、主体和装饰的建造步骤。代码示例中定义了抽象建造者类和两种具体建造者类,指挥者类负责协调建造过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建造者模式:最重要的是指挥者类对复杂产品的拼装顺序和方法,适用于拼装方式比较稳定但复杂的产品。

public class House {
    //地基
    private String foundation;
    //主体
    private String subject;
    //装饰
    private String decorate;

    public House() {
    }


    public String getFoundation() {
        return foundation;
    }

    public void setFoundation(String foundation) {
        this.foundation = foundation;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getDecorate() {
        return decorate;
    }

    public void setDecorate(String decorate) {
        this.decorate = decorate;
    }

    @Override
    public String toString() {
        return "House{" +
                "foundation='" + foundation + '\'' +
                ", subject='" + subject + '\'' +
                ", decorate='" + decorate + '\'' +
                '}';
    }
}
public abstract class Builder {
    protected House house = new House();
    public abstract void doFoundation();
    public abstract void doSubject();
    public abstract void doDecorate();
    public abstract House createHouse();
}
public class CommonBuilder extends Builder {

    @Override
    public void doFoundation() {
        house.setFoundation("石头地基");
    }

    @Override
    public void doSubject() {
        house.setSubject("木头主体");
    }

    @Override
    public void doDecorate() {
        house.setDecorate("叙利亚装饰");
    }

    @Override
    public House createHouse() {
        return house;
    }
}
public class BestBuilder extends Builder {
    @Override
    public void doFoundation() {
        house.setFoundation("水泥地基");
    }

    @Override
    public void doSubject() {
        house.setSubject("钢筋混凝土主体");
    }

    @Override
    public void doDecorate() {
        house.setDecorate("豪华装饰");
    }

    @Override
    public House createHouse() {
        return house;
    }
}
public class Directory {
    private Builder builder;

    public Directory(Builder builder) {
        this.builder = builder;
    }
    public House getHouse(){
        //通过一定的算法组装一个对象(先打地基后做主体最后装饰)
        builder.doFoundation();
        builder.doSubject();
        builder.doDecorate();
        return builder.createHouse();
    }
}
public class Client {
    public static void main(String[] args) {
        //获得一个具体建造者对象
        CommonBuilder commonBuilder = new CommonBuilder();
        //获得一个指挥者对象
        Directory directory = new Directory(commonBuilder);
        //完成搭盖房子
        House house = directory.getHouse();

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值