标签:rgs 静态成员 demo 增加 sys his 类成员变量 声明 main
建造者模式
使用情况:
类的构造器或者静态工厂中具有多个可变参数
优点如下:
各个具体的建造者相互独立,有利于系统的扩展。
客户端不必知道产品内部组成的细节,便于控制细节风险。
缺点如下:
产品的组成部分必须相同,这限制了其使用范围。
如果产品的内部变化复杂,该模式会增加很多的建造者类。
建造者(Builder)模式由
产品、抽象建造者、具体建造者、指挥者等 4 个要素构成
构建器
静态内部类可以:
调用外部类的构造方法
访问外部类静态成员变量和方法
静态内部类可以:
声明普通成员变量和方法(普通内部类不能声明静态类成员变量和方法)
在创建静态类内部对象时,不需要其外部类的对象。
内部类被static修饰后,随着Outer类加载到内存,
被static修饰的内部类也会加载到内存中,也就是说jvm会将硬盘上的Outer.class和
Outer$Inner.class文件一起加载到内存中,这样可以把一个静态内部类理解为一个
和外部类一样的类,不需要外部类的对象来调用。
如果想要创建静态内部类的对象,因为已经被加载到内存中,随时可以创建静态内部类的对象
不需要创建Outer的对象,只需要根据内部类的名字创建就可以
Outer.Inner in = new Outer.Inner();
1 public class Builder { 2 /** 3 * filal只能赋值一次 4 * 可在定义时初始化 5 * 可在构造方法中赋值 6 * 可在构造代码块中赋值 7 */ 8 private final String name; 9 private final int age; 10 private final String grand; 11 private final int birthday; 12 13 public static class Build { 14 //必须的参数 15 private final String name; 16 private final int age; 17 //有默认值的参数 18 private String grand = "男"; 19 private int birthday = 0; 20 21 public Build(String name, int age) { 22 this.name = name; 23 this.age = age; 24 } 25 26 public Build build1(String grand) { 27 this.grand = grand; 28 return this; 29 } 30 31 public Build build2(int birthday) { 32 this.birthday = birthday; 33 return this; 34 } 35 36 public Builder toBuilder() { 37 return new Builder(this); 38 } 39 } 40 41 //外部类的构造方法 42 private Builder(Build build) { 43 name = build.name; 44 age = build.age; 45 grand = build.grand; 46 birthday = build.birthday; 47 } 48 49 //使用 50 public static void main(String[] args) { 51 Builder builderDemo = new Builder.Build("小明", 12).build1("男").toBuilder(); 52 System.out.println(builderDemo.birthday); 53 } 54 }
标签:rgs 静态成员 demo 增加 sys his 类成员变量 声明 main
原文地址:https://www.cnblogs.com/loveer/p/11273443.html