设计模式-建造者模式

1.简介

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

2.使用场景

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

3.案例

下面写一个创建电脑的案例,电脑有 主板、显示屏、系统组成。但是我们想要创建一个Mac电脑。首先能确定苹果电脑的系统是OS。

```

computer

public abstract class Computer {

    protected String os;

    protected String broad;

    protected String display;

    public void setOs(String os) {

        this.os = os;

    }

    public void setBroad(String broad) {

        this.broad = broad;

    }

    public void setDisplay(String display) {

        this.display = display;

    }

    @Override

    public String toString() {

        return "Computer{" +

                "os='" + os + '\'' +

                ", broad='" + broad + '\'' +

                ", display='" + display + '\'' +

                '}';

    }

}

```

MacBook 以及内部类 Builder

```

public abstract class Builder {

    public abstract Builder buildOs(String os);

    public abstract Builder buildDisplay(String display);

    public abstract Builder buildBroad(String broad);

    public abstract Computer build();

}

```

```

public class MacBook extends Computer {


    public MacBook(String os, String broad, String display) {

        this.os = os;

        this.broad = broad;

        this.display = display;

    }

    public static class MacBookBuilder extends Builder{

        private String os,broad,display;

        @Override

        public Builder buildOs(String os) {

            this.os =os;

            return this;

        }

        @Override

        public Builder buildDisplay(String display) {

            this.display = display;

            return this;

        }

        @Override

        public Builder buildBroad(String broad) {

            this.broad= broad;

            return this;

        }

        @Override

        public Computer build() {

            return new MacBook(os,broad,display);

        }

    }

}

```

执行代码

```

        Computer macBookBuilder = new MacBook.MacBookBuilder()

                .buildOs("huawei")

                .buildDisplay("xxx")

                .buildBroad("mac OS ")

                .build();

        Log.d(TAG, "testBuilder: " + macBookBuilder.toString());

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。