建造者模式

建造者模式是一种创建型设计模式,它将产品对象的构建与表示分离,允许创建不同表示的相同构建过程。模式中包含抽象建造者、具体建造者、产品和指挥者角色。通过指挥者协调建造过程,客户端可以灵活地选择建造者,从而构建不同类型的复杂产品。
摘要由CSDN通过智能技术生成

建造者模式

创建型模式

UML

在这里插入图片描述

说明

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式用于一步步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容进行构建,用户不需要知道内部的具体构建细节。建造者模式也称为生成器模式。

建造者模式包含四个角色:

Builder:抽象建造者。为创建一个Product对象的各个部件指定的抽象接口

ConcreteBuilder:具体建造者。实现抽象建造者Builder,构建和装配产品的各个组件。做具体的构建工作,但不为客户端所知。

Product:产品,被构建的复杂对象。具体建造者创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包含将这些部件专配成最终的产品的接口。

Director:指挥者。构建一个使用抽象建造者Builder的对象。它与客户端打交道,将客户端创建产品的请求划分为对各个零件的建造请求,再将请求委派给ConcreteBuilder。

示例代码

// 抽象建造者
interface Builder{
    // 产品零件建造方法
    void buildPart1();
    void buildPart2();
}
// 具体建造者1
class ConcreteBuilder1 implements Builder{
	private Product product = new Product();
    // 产品零件建造方法1
    public void buildPart1(){
        // 构建产品第一个零件
        product.setPart1("软件体系结构");
    }
    // 产品零件建造方法2
    public void buildPart2(){
        // 构建产品第二个零件
        product.setPart2("软件设计");
    }
    // 产品返还方法
    public Product retrieveResult(){
        return product;
    }
}
// 具体建造者2
class ConcreteBuilder2 implements Builder{
	private int s =0;
    // 产品零件建造方法1
    public void buildPart1(){
        // 构建产品第一个零件
        s++;
    }
    // 产品零件建造方法2
    public void buildPart2(){
        // 构建产品第二个零件
        s++;
    }
    // 产品返还方法
    public int getResult(){
        return s;
    }
}
// 指挥者
class Director{
    // 持有当前需要使用的建造器对象
    private Builder builder;
    // 构造方法
    public Director(Builder builder){
        this.builder = builder;
    }
    public void setBuilder(Builder builder){
		this.builder = builder;
    }
    // 建造方法  construct() 负责调用 ConcreteBuilder 对象的零件建造方法
    public void construct(){
        builder.buildPart1();
        builder.buildPart2();
    }
}
// 产品类
class Product{
    private String part1;
    private String part2;
    public String getPart1(){
        return part1;
    }
    public void setPart1(String part1){
		this.part1 = part1;
    }
    public String getPart2(){
        return part2;
    }
    public void setPart2(String part2){
		this.part2 = part2;
    }
}
// 测试程序
class Test{
    public static void main(String[] args){
        // 相同的指挥者,不同的具体建造者,建造不同的产品
        ConcreteBuilder1 builder1 = new ConcreteBuilder1();
        Director director = new Director(builder1);
        director.construct();
        Product product = builder1.retrieveResult();
        System.out.println(product.getPart1()+"  "+product.getPart2());
        
        ConcreteBuilder2 builder2 = new ConcreteBuilder2();
        director.setBuilder(builder2);
        director.construct();
        System.out.println(builder2.getResult());
    }
}

综述

建造者模式与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。

在建造者模式的结构中引入了一个指挥者类,该类的主要作用有两个:一方面它隔离了客户与生产过程;另一方面它负责控制产品的生成过程。客户端只需要指导具体建造者的类型,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。

优点

客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象,每一个具体建造者都相对独立,而与其他具体建造者无关,因此可以很方便的替换具体建造者或者增加新的具体建造者,还可以更加精细的控制产品的创建过程。

缺点

由于建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,因此其使用范围受到了一定限制。如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

使用场景

新的具体建造者,还可以更加精细的控制产品的创建过程。

缺点

由于建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,因此其使用范围受到了一定限制。如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

使用场景

需要生成的对象有复杂的内部结构,这些产品对象通常包含多个成员属性;需要生成的产品对象的属性相互依赖,需要指定其生成顺序;对象的创建过程独立于创建该对象的类;隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同类型的产品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值