设计模式一建造者模式

建造者模式

使用情况:
类的构造器或者静态工厂中具有多个可变参数
优点如下:
各个具体的建造者相互独立,有利于系统的扩展。
客户端不必知道产品内部组成的细节,便于控制细节风险。
缺点如下:
产品的组成部分必须相同,这限制了其使用范围。
如果产品的内部变化复杂,该模式会增加很多的建造者类。
建造者(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 }
 

 

猜你喜欢

转载自www.cnblogs.com/loveer/p/11273443.html