0
点赞
收藏
分享

微信扫一扫

建造者模式(Builder)

松鼠树屋 2021-09-19 阅读 36
设计模式

定义:将一个复杂对象的构造与表示分离,同样的构建过程可以创建出不同的表示。

将一个复杂对象拆分成多个简单对象,然后通过组合拼成一个完整对象表示,简单对象可以灵活选择,最终导致相同的构建过程,创建出的表示会根据意愿表示出各种不同结果

优点:

  • 封装性好,构建和表示分离
  • 解耦
  • 建造者对创建过程细化,客户端不必知道产品内部组成细节

缺点:

  • 产品的组成部分必须相同
  • 如果产品内部发生变化,建造者也要同步修改,维护成本大

建造者(Builder)模式工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂模式更注重零部件的创建过程,但两者可以结合使用。

模式的实现

复杂产品对象:由多个简单部件组成

package com.yang.builder;

import lombok.Data;

/**
 * Iphone 包含多个组成部件的复杂对象
 */
@Data
public class Iphone {
    //电池
    private Battery battery;
    //显示屏
    private Screen screen;
    //显示产品特性
    public void show() {
        battery.print();
        screen.print();
        System.out.println("iphone组装完成");
    }
}

组成部件A:

package com.yang.builder;
//具体产品:电池
public class Battery {
    public void print() {
        System.out.println("电池生产完成");
    }
}

组成部件B:

package com.yang.builder;
//具体产品:屏幕
public class Screen {
    public void print() {
        System.out.println("显示屏生产完成");
    }
}

抽象建造者:包含多个部件的抽象创建方法,通常还有一个返回复杂对象的具体方法

package com.yang.builder;
abstract class Builder {
    //创建产品对象
    protected Iphone iphone = new Iphone();
    public abstract void buildBattery();
    public abstract void buildScreen();
    //返回产品
    public Iphone getResult(){
        return iphone;
    }
}

具体建造者:完成复杂部件的各个组成部件的具体创建方法

package com.yang.builder;

//具体建造者:实现了抽象建造者接口。
public class BuilderImpl extends Builder {
    @Override
    public void buildBattery() {
        iphone.setBattery(new Battery());
    }

    @Override
    public void buildScreen() {
        iphone.setScreen(new Screen());
    }
}

指挥者:

package com.yang.builder;

public class Director {
    private final Builder builder;
    public Director(Builder builder){
        this.builder = builder;
    }
    //产品组装方法
    public Iphone construct(){
        builder.buildBattery();
        builder.buildScreen();
        return builder.getResult();
    }
}

客户端:

package com.yang.builder;

public class Client {
    public static void main(String[] args) {
        Builder builder = new BuilderImpl();
        Director director = new Director(builder);
        Iphone iphone = director.construct();
        iphone.show();
    }
}
电池生产完成
显示屏生产完成
iphone组装完成

建造者模式和工厂模式的区别

  • 建造者模式更加注重的是对象创建的顺序,一个复杂对象通过不同的组装顺序,最终的表现也不一样,工厂模式注重的是对象的创建,创建出来的对象都一样。
举报

相关推荐

0 条评论