设计模式(九)建造者模式

总章目录,设计模式(一)基本介绍

一、简介

建造者模式(Builder Pattern) 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
UML类图:
1、抽象建造者(Builder):抽象接口或类,以规范产品对象的各个组成成分的建造。
2、具体建造者(ConcreteBuilder):1.实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作。2.在建造过程完成后,提供产品的实例。
3、指导者(Director):担任这个角色的类调用具体建造者角色以创建产品对象。
4、产品(Product):产品便是建造中的复杂对象。

优点:

  1. 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
  2. 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象 。
  3. 可以更加精细地控制产品的创建过程 。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
  4. 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合 “开闭原则”

缺点:

  1. 建造者模式所创建的产品一般具有较多的共同点,因此其使用范围受限。
  2. 产品的内部变化复杂,会导致系统变得很庞大。

二、实现

以下方式为简单的实现,通常会在create时赋值,赋值时仅保存变量

public class Summoner {
    private String shoes;
    private String arms;
    private String name;

    //省略 get  set

    public static class Builder {

        Summoner summoner;

        public void Builder(){
              summoner = new Summoner();
        }

        public Builder setArms(String arms) {
            summoner.setArms(arms);
            return this;
        }

        public Builder setShoes(String shoes) {
            summoner.setShoes(shoes);
            return this;
        }

        public Builder setName(String name) {
            summoner.setName(name);
            return this;
        }

        public Summoner build() {
            return summoner;
        }
    }
}
public class client {
    public static void main(String[] args) {
        Summoner summoner = new Summoner.Builder()
                .setName("武器大师")
                .setArms("三相之力")
                .setShoes("水银鞋");
        System.out.println(summoner.toString());
    }
}

推荐阅读更多精彩内容