首页 > 其他分享 >建造者模式

建造者模式

时间:2023-12-12 09:12:36浏览次数:26  
标签:name age 建造 模式 User password nickName String

建造者模式故名思意有两个重要的原色,一个是产品(product),即我们需要的某个目标类的对象,一个建造者(builder),当然你可以把建造者先抽象出一个的abstractbuilder,再继承一个具体的builder.

最妙的一句是builder类再builder具体东西时,return this,这样在builder对象时,就可以使用

User d = User.builder() .name("foo").password("pAss12345") .age(25) .build();

完整代码示例
class User {
    // 下面是“一堆”的属性
    private String name;
    private String password;
    private String nickName;
    private int age;

    // 构造方法私有化,不然客户端就会直接调用构造方法了
    private User(String name, String password, String nickName, int age) {
        this.name = name;
        this.password = password;
        this.nickName = nickName;
        this.age = age;
    }
    // 静态方法,用于生成一个 Builder,这个不一定要有,不过写这个方法是一个很好的习惯,
    // 有些代码要求别人写 new User.UserBuilder().a()...build() 看上去就没那么好
    public static UserBuilder builder() {
        return new UserBuilder();
    }

    public static class UserBuilder {
        // 下面是和 User 一模一样的一堆属性
        private String  name;
        private String password;
        private String nickName;
        private int age;

        private UserBuilder() {
        }

        // 链式调用设置各个属性值,返回 this,即 UserBuilder
        public UserBuilder name(String name) {
            this.name = name;
            return this;
        }

        public UserBuilder password(String password) {
            this.password = password;
            return this;
        }

        public UserBuilder nickName(String nickName) {
            this.nickName = nickName;
            return this;
        }

        public UserBuilder age(int age) {
            this.age = age;
            return this;
        }

        // build() 方法负责将 UserBuilder 中设置好的属性“复制”到 User 中。
        // 当然,可以在 “复制” 之前做点检验
        public User build() {
            if (name == null || password == null) {
                throw new RuntimeException("用户名和密码必填");
            }
            if (age <= 0 || age >= 150) {
                throw new RuntimeException("年龄不合法");
            }
            // 还可以做赋予”默认值“的功能
              if (nickName == null) {
                nickName = name;
            }
            return new User(name, password, nickName, age);
        }
    }
}

public class APP {
    public static void main(String[] args) {
        User d = User.builder()
                .name("foo")
                .password("pAss12345")
                .age(25)
                .build();
    }
}
 

标签:name,age,建造,模式,User,password,nickName,String
From: https://www.cnblogs.com/seeksimple/p/17896013.html

相关文章

  • 23种设计模式——装饰者模式
    今天给大家说一下23种设计模式中装饰者模式。一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。这个时候,我们就需要用到装饰者模式了,它可以实现在不增加很多子类的情况下扩展类的功能。概念:装饰者模式(DecoratorPatt......
  • 工厂模式
    工厂模式可分为简单工程、工厂方法、抽象工厂三类:简单工厂模式:又叫做静态工厂方法模式。该模式是通过传⼊参数来返回相应的类,这种方式比较单一,一个工厂负责制造所有子类产品,当增加一个子类产品时,需要对工厂进行修改,扩展性相对较差。简单工厂模式看为工厂方法模式的一种特例,两者......
  • 模板模式
    1#include<iostream>2usingnamespacestd;34//PC机,手机,平板5classMakeOrder{6public:7//virtualvoidstartOrder()=0;第一版8//钩子函数的模板方法9virtualvoidstartOrder(){10cout<<"下订单了"<<endl......
  • 设计模式之责任链模式
    1.定义请求沿着一条链传递,直到有一个对象能够处理它为止2.口语化表述假设某公司的财务审批流程如下:项目经理可以审批1000元以下的费用,大于1000元的费用提交给部门经理审批部门经理可以审批10000元以下的费用,大于10000的费用提交给总经理审批总经理可以审批任何额度的费用......
  • 抽象工厂模式:角色解析与应用探索
    前言工厂模式一般指的是简单工厂模式、工厂方法模式、抽象工厂模式,这是三种工厂模式的最后一篇,其他两种的文章链接如下:设计模式之是简单工厂模式_凡夫编程的技术博客_51CTO博客工厂方法模式:改变你对软件开发的认知_凡夫编程的技术博客_51CTO博客建议三种模式放在一起对比学习,更能......
  • oracle Parallel模式-Parallel用法(/*+PARALLEL(n)*/)
    一、用途强行启用并行度来执行当前SQL。这个在Oracle9i之后的版本可以使用,之前的版本现在没有环境进行测试。也就是说,加上这个说明,可以强行启用Oracle的多线程处理功能。举例的话,就像电脑装了多核的CPU,但大多情况下都不会完全多核同时启用(2核以上的比较明显),使用parallel说明,就会......
  • 设计模式-访问者模式(主要理解“双重分派”)
    代码展示:packagecom.example.test;importjava.util.ArrayList;importjava.util.List;publicclass访问者模式{}abstractclassDepartment{abstractvoidvisit(FullTimeEmployeefullTimeEmployee);//正式工的访问abstractvoidvisit(PartTimeEmployee......
  • java 策略模式解决if-else ,函数式接口解决编写多个子类的问题
    /***@author:szc*@date:2023/9/222:45*@version:1.0*@description:从map中获取函数式接口,解决if-else多个子类问题*/@ServicepublicclassMapToInterface{@AutowiredprivateTypeResulttypeResult;privatestaticMap<String,Functio......
  • 23种设计模式——桥接模式
    今天我们继续学习23种设计模式中的桥接模式。所谓桥接模式就是将抽象部分和实现部分隔离开来,使得它们能够独立变化。桥接模式将继承关系转化成关联关系,封装了变化,完成了解耦,减少了系统中类的数量,也减少了代码量。概念:桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化。......
  • 设备驱动设计模式 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/driver-model/design-patterns.html设备驱动设计模式这份文档描述了设备驱动中常见的设计模式。子系统维护者可能会要求驱动开发者遵循这些设计模式。状态容器container_of()1.状态容器虽然内核中包含一些设备驱动,假......