建造者模式

本文详细介绍了建造者模式,包括其四个角色(产品、抽象建造者、具体建造者和指挥者)的作用,以及如何通过代码示例展示如何使用该模式来解耦对象创建和属性设定。从普通方式到建造者模式的转变,突出了设计模式在扩展性和灵活性提升上的优势。

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

建造者模式

一、基本介绍

  1. 建造者模式又名生成这模式,是一种对象构建模式。
  2. 建造者模式用于将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造不同表现(属性)得对象
  3. 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

​ 建造者模式中的4个角色:

  1. Product(产品角色):一个具体的产品对象

  2. Builder(抽象建造者):创建一个Product对象。约定规范构建和装配产品的各个部件(方法)

  3. ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件(方法)

  4. Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。

    ​ 它主要的两个作用:

    ​ (1)隔离客户与对象的生成过程

    ​ (2)负责控制产品对象的生产过程

二、普通方式建造对象

1、介绍

优点:简单、好理解、容易操作

缺点:

​ 该方式建造对象,过于简单,没有设计缓冲层对象,程序的扩展和维护不好。

​ 这种设计方式将产品(饺子)和创建产品的过程(做饺子的过程)封装在一起,耦合性增强

而建造者模提供的解决方案就是将产品和产品建造过程解耦。

2、代码

/**
 * 抽象饺子类
 */
public abstract class AbstractDumplings {

    //擀面皮
    public abstract void crust();

    //添加馅料
    public abstract void stuffing();

    //煮饺子
    public abstract void boil();


    public void build(){
        crust();
        stuffing();
        boil();
    }


}
/**
 * 牛肉饺子
 */
public class BeefDumplings extends AbstractDumplings{
    @Override
    public void crust() {
        System.out.println("擀牛肉饺子面皮");
    }

    @Override
    public void stuffing() {
        System.out.println("包牛肉饺子");
    }

    @Override
    public void boil() {
        System.out.println("煮牛肉饺子");
    }
}
/**
 * 猪肉饺子
 */
public class PorkDumplings extends AbstractDumplings{
    @Override
    public void crust() {
        System.out.println("擀猪肉饺子面皮");
    }

    @Override
    public void stuffing() {
        System.out.println("包猪肉饺子");
    }

    @Override
    public void boil() {
        System.out.println("煮猪肉饺子");
    }
}
public class Test {

    public static void main(String[] args) {
        BeefDumplings beefDumplings = new BeefDumplings();
        beefDumplings.build();

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

        PorkDumplings porkDumplings = new PorkDumplings();
        porkDumplings.build();
    }

}

三、建造者模式

1、介绍

Product(产品角色):Dumplings

Builder(抽象建造者):DumplingsBuilder

ConcreteBuilder(具体建造者):BeefDumplings、PorkDumplings

Director(指挥者):DumplingsDirector

2、UML

在这里插入图片描述

3、代码实现

/**
 * 饺子
 */
public class Dumplings {

    //面皮
    private String crust;

    //馅料
    private String stuffing;

    //煮
    private String boil;


    public String getCrust() {
        return crust;
    }

    public void setCrust(String crust) {
        this.crust = crust;
    }

    public String getStuffing() {
        return stuffing;
    }

    public void setStuffing(String stuffing) {
        this.stuffing = stuffing;
    }

    public String getBoil() {
        return boil;
    }

    public void setBoil(String boil) {
        this.boil = boil;
    }
}
/**
 * 饺子构建者
 */
public abstract class DumplingsBuilder {

    Dumplings dumplings = new Dumplings();

    //擀面皮
    public abstract void crust();

    //添加馅料
    public abstract void stuffing();

    //煮饺子
    public abstract void boil();


    public Dumplings build() {
        return dumplings;
    }

}
/**
 * 牛肉饺子
 */
public class BeefDumplings extends DumplingsBuilder {
    @Override
    public void crust() {
        System.out.println("擀牛肉饺子面皮");
    }

    @Override
    public void stuffing() {
        System.out.println("包牛肉饺子");
    }

    @Override
    public void boil() {
        System.out.println("煮牛肉饺子");
    }
}
/**
 * 猪肉饺子
 */
public class PorkDumplings extends DumplingsBuilder {
    @Override
    public void crust() {
        System.out.println("擀猪肉饺子面皮");
    }

    @Override
    public void stuffing() {
        System.out.println("包猪肉饺子");
    }

    @Override
    public void boil() {
        System.out.println("煮猪肉饺子");
    }
}
/**
 * 饺子指挥者
 */
public class DumplingsDirector {

    private DumplingsBuilder dumplingsBuilder = null;

    public DumplingsDirector(DumplingsBuilder dumplingsBuilder){
        this.dumplingsBuilder = dumplingsBuilder;
    }

    /**
     * 获取饺子
     * @return
     */
    public Dumplings getDumplings() {
        dumplingsBuilder.crust();
        dumplingsBuilder.stuffing();
        dumplingsBuilder.boil();
        return dumplingsBuilder.build();
    }

}
public class Test {

    public static void main(String[] args) {

        DumplingsDirector dumplingsDirector = new DumplingsDirector(new BeefDumplings());
        dumplingsDirector.getDumplings();

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

        DumplingsDirector dumplingsDirector2 = new DumplingsDirector(new PorkDumplings());
        dumplingsDirector2.getDumplings();

    }

}
or(new BeefDumplings());
        dumplingsDirector.getDumplings();

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

        DumplingsDirector dumplingsDirector2 = new DumplingsDirector(new PorkDumplings());
        dumplingsDirector2.getDumplings();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大树下躲雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值