建造器模式

Posted by Jesse' Notes on February 5, 2017

建造器模式

1.为什么要用建造设计模式

当一个类的属性非常多,当构造这个类的时候,每次传入的属性的个数都不一样,就会导致这个类的构造方法非常多。一个类可能出现几十个重载的构造函数,造成不易使用,每次使用都需要查询API才知道每个参数的含义是什么?

2、什么是建造器模式?

建造器模式就是隐藏显示构建对象的方法,在类中加一个静态内部类,在静态内部类中有一个对象,在构建的时候先把属性传给内部类中的对象,然后检查这个对象的属性依赖是否正确,如果正确,则把这个对象的属性值赋值给外部类的属性,并构造对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
 * @Author: jesse
 * @Date: 2018/12/19
 * @Time: 10:30 AM
 */
public class Square {
    private int color;
    private int borderSize;

    private Square(Builder builder) {
        this.color = color;
        this.borderSize = borderSize;
    }

    public static class Builder{
        private int color;
        private int borderSize;

        public int getColor() {
            return color;
        }

        public void setColor(int color) {
            this.color = color;
        }

        public int getBorderSize() {
            return borderSize;
        }

        public void setBorderSize(int borderSize) {
            this.borderSize = borderSize;
        }
        public Square build(){
            //检查参数之间关系是否设置正确
            if(borderSize<0){
                //处理
            }
            return new Square(this);
        }
    }


}

3、为什么不用对象的get\set方法

get\set方法需要先构建对象,在给对象属性进行赋值,这样无法检查属性依赖是否正确,因为对象已经构建了,但这个对象是不合法的。