静态内部类-建造者模式及其应用

文章目录

  • 静态内部类-建造者模式
    • 静态内部类
    • 建造者模式
    • 静态内部类-建造者模式
  • 源码
    • Person.java
    • Main.java
    • 运行结果:

静态内部类-建造者模式

静态内部类

  静态内部类,顾名思义就是位于java类中的类,只不过是为了便于在外部类创建前对其加以调用,我们将其内部类用static修饰符加以修饰。

  它具有以下特点:

  • 静态内部类如果要访问外部的成员变量或者成员方法,那么对应的外部成员变量或者成员方法必须是静态的。
  • 静态内部类属于外部类,而不是属于外部类的对象。
  • 静态内部类的存在往往是辅助于外部类的,因而静态内部类往往和外部类一起来使用,而不是自己单独使用。
  • 会生成两个.class文件,一个是外部的类Outer.class,另一个是Outer$Inner.class

建造者模式

  建造者模式(Builder Pattern),使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

  一个Builder类会一步一步构造最终的对象。该Builder类是独立于其他对象的。

静态内部类-建造者模式

  静态内部类-建造者模式,兼具上述两种之特点,通过内部类辅助外部类,我们可以简化我们的代码编写,提高代码的编写效率,同时它也提供了一种创建对象的最佳方式,通过这种方式创建的对象,其即便是在高并发下也有不俗的表现。

  正因为如此,其在现在的程序开发中应用也变得越来越广,比如说Lombok官网中的@Builder就是基于该原理来实现的。

源码

Person.java

package com.lyc.builder;

public class Person {

    private int id;
    private String name;
    private int age;
    private String address;

    public Person() {
    }

    public Person(PersonBuilder personBuilder) {
        this.id = personBuilder.id;
        this.name = personBuilder.name;
        this.age = personBuilder.age;
        this.address = personBuilder.address;
    }

    public static Person.PersonBuilder builder(){
        return new Person.PersonBuilder();
    }

    public static class PersonBuilder{

        private int id;
        private String name;
        private int age;
        private String address;

        public PersonBuilder() {
        }

        public Person build(){
            return new Person(this);
        }

        public PersonBuilder id(int id) {
            this.id = id;
            return this;
        }

        public PersonBuilder name(String name) {
            this.name = name;
            return this;
        }

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

        public PersonBuilder address(String address) {
            this.address = address;
            return this;
        }
    }

    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

Main.java

package com.lyc.builder;

public class Main {

    public static void main(String[] args) {
        Person person = Person.builder()
                .id(1)
                .name("zhangsan")
                .age(21)
                .address("nanjing")
                .build();
        System.out.println(person.toString());
    }
}

运行结果:

Person{id='1', name='zhangsan', age=21, address='nanjing'}

你可能感兴趣的:(Java)