Builder模式的简单使用

Builder模式是一种一步一步创建一个复杂对象的设计模式,我认为这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建的过程和具体的表示分离开来。

package BuilderPattern;

public class Student {

private int stuNum ;

    private String name ;

    private int age ;

    private String address ;

    private boolean girlfriend ;

    private Student(){}//定义私有构造器,只能在类内部使用(提供给静态内部类创建一个对象)

     // 定义私有的有参构造器 ,即给对象的属性赋值,由静态内部类调用

    private Student(int stuNum,String name,int age,String address,boolean girlfriend){

        this.stuNum = stuNum ;

        this.name = name ;

        this.age = age ;

        this.address = address ;

        this.girlfriend = girlfriend ;

    }

   public int getStuNum() {

           return stuNum;

    }

    public void setStuNum(int stuNum) {

            this.stuNum = stuNum;

    }

    public StringgetName() {

            return name;

    }

    public void setName(String name) {

            this.name = name;

    }

    public int getAge() {

            return age;

    }

   public void setAge(int age) {

        this.age = age;

    }

   public StringgetAddress() {

          return address;

    }

   public void setAddress(String address) {

          this.address = address;

    }

   public boolean isGirlfriend() {

           return girlfriend;

    }

    public void setGirlfriend(boolean girlfriend) {

           this.girlfriend = girlfriend;

    }

    public static class Builder{//静态内部类,通过该类来创建一个外部类对象,使用链式调用

          private Studentstudent ;//创建一个外部类对象

          //构造一个内部类对象,通过该对象设置属性值

          //如果存在必填参数,可以以带参构造函数的方式传过来

          public Builder(int stuNum,String name,int age,String address,boolean girlfriend){

                   student =new Student(stuNum,name,age,address,girlfriend);

         }

         public Builder(){

             student =new Student();

         }

         public Builder stuNum(int stuNum){

                student.stuNum = stuNum;

                return this ;

         }

        public Builder name(String name){

               student.name = name;

               return this ;

         }

        public Builder age(int age){

                 student.age = age;

                 return this ;

         }

         public Builder address(String address){

                    student.address = address;

                    return this ;

        }

        public Builder girlfriend(boolean girlfriend){

                  student.girlfriend = girlfriend;

                  return this ;

        }

        public Student build(){

                 return student;

        }

    }

}

调用:

// 第一种方式

Student student1 =new Student.Builder(1,"老王",36,"隔壁",false)

                   .build();

//第二种方式

Student student2 =new Student.Builder()

           .stuNum(2)

           .name("小张")

           .age(20)

           .address("上海")

           .girlfriend(true)

           .build();

System.out.println(student1.toString() +" \n" + student2.toString());

输出:      我重写了toString()

stuNo:1,name:老王,age:36,address:隔壁,grilfriend:false

stuNo:2,name:小张,age:20,address:上海,grilfriend:true

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,292评论 19 139
  • 前言 : Android中的AlertDialog用的就是builder设计模式,图片加载控件Universal-...
    正阳Android阅读 7,734评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,894评论 18 399
  • 破晓黎明,疏影寒窗,琼楼梅妆,锦城山色,泪成霜; 谁在执笔,摇曳心殇?抛钩锁月,寒烟陌上,情难忘; 伊若花开,可栩...
    锦州悟空阅读 4,097评论 0 7
  • 前言 由于前期赶项目,所以在项目中难免多了一些bug,最近项目闲了下来,为了能够快速定位到线上版本bug位置,经过...
    yuyangkk阅读 15,853评论 18 38