美文网首页
Java学习笔记(7)-23种设计模式之建造者模式

Java学习笔记(7)-23种设计模式之建造者模式

作者: 非典型程序猿 | 来源:发表于2020-02-22 15:06 被阅读0次

    建造者模式大家可能听起来会比较陌生,但是看完下面的代码大家应该就明白是怎么回事了.假设我们有一个Student对象,有name , age , sex三个变量,同时我们要创建一个名字叫张三,年龄18,性别男的实例对象,按以往的写法,大家都会这么创建:
    首先写一个Student类

    public class Stduent {
        private String name ; 
        private String age ; 
        private String sex ;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
        public String toString(){
            return "姓名:"+name+" 年龄:"+age+" 性别:"+sex;
        }
    }
    

    接下来写一个测试类

    public class MyTest {
        public static void main(String[] args){
            Stduent stduent = new Stduent();
            stduent.setName("张三");
            stduent.setAge("18");
            stduent.setSex("男");
            System.out.println(stduent.toString());
        }
    }
    

    打印结果如下

    姓名:张三 年龄:18 性别:男
    

    但是如果换种写法会不会比较简单明了,看起来更清爽?像下面这样

    public class MyTest{
        public static void main(String[] args) throws CloneNotSupportedException {
            Student student = new Student
                    .Builder()
                    .name("张三")
                    .age("18")
                    .sex("男").build();
            System.out.println(student.toString());
    
        }
    }
    

    这就是本篇要总结的建造者模式,接下来先上代码,再分析如何实现这种链式结构的.

    public class Student {
        private String name ;
        private String age ;
        private String sex ;
        private Student(Builder builder){
            this.name = builder.getName();
            this.age = builder.getAge();
            this.sex = builder.getSex();
        }
        public static class Builder{
            private String name ;
            private String age ;
            private String sex ;
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public String getAge() {
                return age;
            }
    
            public void setAge(String age) {
                this.age = age;
            }
    
            public String getSex() {
                return sex;
            }
    
            public void setSex(String sex) {
                this.sex = sex;
            }
            public Builder name(String name){
                this.name = name;
                return this;
            }
            public Builder age(String age){
                this.age = age;
                return this;
            }
            public Builder sex(String sex){
                this.sex = sex;
                return this ;
            }
            public Student build(){
                return new Student(this);
            }
        }
        public String toString(){
            return "姓名:"+this.name+" 年龄:"+this.age+" 性别:"+this.sex;
        }
    
    }
    

    我们开始分析这种写法的过程

    • 创建一个Student对象,定义好各个变量
    • 创建一个静态内部类Builder,并且它拥有和Student同样的变量。
    • 在静态内部类中定义好赋值每个变量的方法,且返回值都是这个Builder对象,如果不统一返回这个Buider对象,那么就无法连续调用这个Builder的方法,也就是链式结构的核心。
    • 将Student的构造方法私有化,让它只能通过Builder实例来赋值变量。
    • 在Builder类里定义一个方法,让它与外部Student类产生关联,将所被赋值的变量都传递给外部的Student对象.

    其实建造者模式还是比较好理解的,还有一种实现方式是通过抽象类的方式实现,有兴趣的小伙伴可以自己去查看一下,建造者模式就总结到这里啦,觉得有帮助记得点个赞~

    相关文章

      网友评论

          本文标题:Java学习笔记(7)-23种设计模式之建造者模式

          本文链接:https://www.haomeiwen.com/subject/yzelqhtx.html