狐彻设计模式学习笔记(二)—— Builder模式

本文是关于Builder设计模式的学习笔记,主要介绍了Builder模式的定义、使用场景、角色、特点以及两种实现方式:简单实现和链式构建。Builder模式用于将对象的构建与表示分离,适用于创建复杂对象并允许精细控制构建过程,尤其在初始化参数多且有默认值时。

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

设计模式(二)—— Builder模式

基于《Android 源码设计模式 解析与实战》第二版(何红辉 关爱民 著)的学习笔记

定义

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

使用场景

  • 通过相同方法,不同执行顺序产生不同结果时使用
  • 多个部件或零件,都可装配到一个对象中,但产生的运行结果不同时
  • 产品类非常复杂,或产品类中的调用顺序不同产生不同作用
  • 初始化一个复杂对象,如参数多,且很多参数有默认值时

角色

  • Builder —— 抽象Builder类,规范产品的组建,一般是由子类实现具体的组件过程
  • ConcreteBuilder —— 具体的Builder类
  • Director —— 统一组装过程

特点

Builder模式是一步一步创建一个复杂对象的创建型模式。其允许用户在不知道内部构件细节的情况下,可以更精细地控制对象的构建流程。该模式是为了将构建复杂对象的过程与其部件解耦,隔离其构建过程和部件的表示

实现方式

简单实现

通过具体的Builder来构建Product产品对象。由DirecorBuilder一同将一个复杂对象与其表示分离。
实际开发中,经常会省略Director类,直接使用一个Builder进行组装。该Builder通常为链式调用。这种方式能使整个结构更为简单

//抽象产品类
abstract class Product {
    protected String s1; //属性1
    protected String s2; //属性2
    protected String s3; //属性3
    
    protected Product(){}
    
    void setS1(String s1) {
        this.s1 = s1;
    }
    
    void setS2(String s2) {
        this.s2 = s2;
    }
    
    void setS3(String s3) {
        this.s3 = s3;
    }
} 
//具体产品类
class ProductWrap {
    protected ProDuctWrap(){}
}
//抽象Builder类
abstract class Builder {
    //构建属性1
    abstract void buildS1(String s1);
    //构建属性2
    abstract void buildS1(String s1);
    //构建属性3
    abstract void buildS1(String s1);
    //构建方法
    abstract Product create();
}
//Director类,负责构建
class Director {
    Builder mBuilder = null;
    
    public Director(Builder builder) {
        mBuilder = builder;
    }
    
    public void construct(String s1, String s2, String s3) {
        mBuilder.buildS1(s1);
        mBuilder.buildS1(s2);
        mBuilder.buildS1(s3);
    }
}
//测试类
class Test {
    void test(){
        Builder builder = new Builder(){
            Product product = new ProductWrap();
            
            @Override
            void buildS1(String s1){
                product.setS1(s1);
            }
            
            @Override
            void buildS2(String s2){
                product.setS1(s2);
            }
            
            @Override
            void buildS3(String s3){
                product.setS1(s3);
            }
            
            @Override
            Product create(){
                return product;
            }
        }
        
        Director director = new Director(builder);
        director.construct("1", "2", "3");
    }
}

链式

省略Director,直接使用Builder。也算是我比较喜欢的类型

//产品类
class Product {
    private String s1;
    private int i2;
    
    private Product(){}
    
    class Builder {
        private Product product;
        
        Builder setS1(String s1){
            product.s1 = s1;
            return this;
        }
        
        Builder setI1(int i2){
            product.i2 = i2;
            return this;
        }
        
        Product create(){
            return product;
        }
    }
}
//测试类
class Test {

    void test(){
        Product product = new Product.Builder()
            .setS1("1").setI1(1)
            .create()
    }
}

直接简洁了许多许多,而且是不是看起来很像AlertDialog?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值