建造者模式

Builder Pattern#

一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的

主要解决#

有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化

这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定

与工厂模式的区别是:建造者模式更加关注与零件装配的顺序

例子 转自https://www.runoob.com/w3cnote/builder-pattern.html#

Computer.java

复制代码
public abstract class Computer {
    protected String mBoard;
    protected String mDisplay;
    protected String mOs;
 
    protected Computer(){
    }
 
    public void setBoard(String board){
        mBoard=board;
    }
 
    public void setDisplay(String display) {
        this.mDisplay = display;
    }
 
    public abstract void setOs() ;
 
    @Override
    public String toString() {
        return "Computer{" +
                "mBoard='" + mBoard + '\'' +
                ", mDisplay='" + mDisplay + '\'' +
                ", mOs='" + mOs + '\'' +
                '}';
    }
}
复制代码

MacBook.java

复制代码
public class MacBook extends Computer{

    protected MacBook() {
    }
 
    @Override
    public void setOs() {
        mOs="Mac OS X 12";
    }
}
复制代码

Builder.java

public abstract class Builder {
 
    abstract void buildBoard(String board);
    abstract void buildDisplay(String display);
    abstract void buildOs();
    abstract Computer build();
}

MacBookBuilder.java

复制代码
public class MacBookBuilder extends Builder {
 
    private Computer mComputer=new MacBook();
    @Override
    void buildBoard(String board) {
        mComputer.setBoard(board);
    }
 
    @Override
    void buildDisplay(String display) {
        mComputer.setDisplay(display);
    }
 
    @Override
    void buildOs() {
        mComputer.setOs();
    }
 
    @Override
    Computer build() {
        return mComputer;
    }
}
复制代码

Director.java

复制代码
public class Director {
    Builder mBuilser=null;
 
    public Director(Builder builer) {
        this.mBuilser = builer;
    }
public void construct(String board,String display){ mBuilser.buildDisplay(display); mBuilser.buildBoard(board); mBuilser.buildOs(); } }
复制代码

Test.java

复制代码
public class Test {
    public static void main(String[] args){
        Builder builder=new MacBookBuilder();
        Director pcDirector=new Director(builder);
        pcDirector.construct("英特尔主板","Retina显示器");
 
        Computer computer = builder.build();
        System.out.println(computer.toString());
    }
}
复制代码

为了灵活构造复杂对象,该对象会有多个成员变量,在外部调用的时候,不需要或者不方便一次性创建出所有的成员变量

在这种情况下,使用多个构造方法去构建对象,很难维护,这时候Builder设计模式解决这个问题,进行buid()方法中创建对象

并且将builder传入,该builder中,维护了传入对象的成员变量

posted @   BigBender  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-01-28 向量组的线性相关与线性无关
2020-01-28 向量间的线性关系
点击右上角即可分享
微信分享提示
主题色彩