Builder-建造者模式

简介: Builder-建造者模式

将一个复杂的对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示。


使用场景:



多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果又相同。

产品类非常复杂,或者产品类中调用顺序不同产生了不同的作用。

初始化一个对象特别复杂,如使用多个构造方法,或者说有很多参数,并且都有默认值时。


核心类



(1) 抽象产品类 computer。

(2) Builder 抽象 Builder,规范产品的组建,一般是由子类实现具体的组建过程。

(3)MacbookBuilder 具体的Builder类,具体的创建对象的类。

(4) Directror 统一组建过程。


代码实现


//计算机抽象类 Computer
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
public class MacBook extends Computer{
    protected MacBook() {
    }
    @Override
    public void setOs() {
        mOs="Mac OS X 12";
    }
}
//抽象 Builder
public abstract class Builder {
    abstract void buildBoard(String board);
    abstract void buildDisplay(String display);
    abstract void buildOs();
    abstract Computer build();
}
//具体的 Builder
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类,负责具体的构造 Computer
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();
    }
}
//具体使用
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());
    }
}



作者:c_gentle

链接:https://www.jianshu.com/p/1e73217e7567

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章
SpringBoot——SpringBoot中使用过滤器Filter的两种方式
SpringBoot——SpringBoot中使用过滤器Filter的两种方式
2756 0
SpringBoot——SpringBoot中使用过滤器Filter的两种方式
|
Java
如何修改HttpServletRequest的Headers?
HttpServletRequest java
3657 0
|
Java Spring
Springboot starter开发之traceId请求日志链路追踪
能标识一次请求的完整流程,包括日志打印、响应标识等,以便于出现问题可以快速定位并解决问题。
2229 0
Springboot starter开发之traceId请求日志链路追踪
|
9月前
|
算法 测试技术 Swift
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与训练效率双突破!
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与训练效率双突破!
294 5
@Builder 注解问题之如何在使用@Builder时设置默认值
@Builder 注解问题之如何在使用@Builder时设置默认值
623 0
|
缓存 安全 Java
谈谈springboot的装饰者模式
【4月更文挑战第14天】在 Spring Boot 中,装饰者模式被广泛应用于增强和扩展现有功能,同时保持核心逻辑的清晰和不变。这种模式在处理请求、响应、以及各种中间件中尤为常见,通过包装一个或多个组件来增加额外的行为或修改现有行为
334 2
|
NoSQL 算法 Java
使用 Spring Boot 实现限流功能:从理论到实践
【6月更文挑战第18天】在微服务和高并发系统中,限流(Rate Limiting)是一种非常重要的技术手段,用于保护系统免受过载,确保服务的稳定性。限流可以控制请求的速率,防止单个客户端或恶意用户消耗过多的资源,从而影响其他用户。
1496 5
|
Java 微服务 Spring
Spring Boot中获取配置参数的几种方法
Spring Boot中获取配置参数的几种方法
1305 2
|
传感器 算法 物联网
OTA升级
【7月更文挑战第20天】OTA升级
1221 3