美文网首页
建造者模式

建造者模式

作者: 梦星夜雨 | 来源:发表于2020-12-29 21:38 被阅读0次

前言

建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。

建造者模式的实现

public final class House {
    private String color;
    private String size;
    private String height;
    public House(Builder builder) {
        // TODO Auto-generated constructor stub
        this.color = builder.color;
        this.size = builder.size;
        this.height = builder.height;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public String getSize() {
        return size;
    }
    public void setSize(String size) {
        this.size = size;
    }
    public String getHeight() {
        return height;
    }
    public void setHeight(String height) {
        this.height = height;
    }
// 构建类
    public static class Builder{
        private String color;
        private String size;
        private String height;
        
        public Builder() {
          this.color = "白色";
          this.height = "2";
        }
        
        public Builder addColor(String color) {
            this.color = color;
            return this;
        }
        public Builder addSize(String size) {
            this.size = size;
            return this;
        }
        public Builder addHeight(String height) {
            this.height = height;
            return this;
        }
        public House build() {
            if (size == null) {
                throw new NullPointerException("房屋大小不能为空");
            }
            return new House(this);
        }
    }
    @Override
    public String toString() {
        return "House [color=" + color + ", size=" + size + ", height=" + height + "]";
    }
    
}

建造者模式实质上就是一个复制的过程,在创建内部类Builder时,可以对部分参数设置默认值,这样就不用对每个参数进行赋值,然后采用链式赋值的方式进行参数的初始化,最后调用build()方法得到所需要的对象。

public class HouseTest {

    public static void main(String args[]) {
        House house = new House.Builder().addColor("红色").addSize("120").build();
        System.out.println(house);
    }
}

上面是构建者模式的调用。

优点:
1.将一个复杂对象的创建过程封装起来。
2.允许对象通过多个步骤创建,并且可以改变过程。
3。向客户隐藏产品内部表现。
4.产品的实现可以被替换,因为客户只看到一个抽象的接口。
缺点:
1.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
2.如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

建造者模式与抽象工厂模式的比较:
与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族 。
在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象 。

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

  • 建造者模式:深入理解建造者模式 ——组装复杂的实例

    目录: 一 建造者模式介绍 1.1 定义 1.2 为什么要用建造者模式(优点)? 1.3 哪些情况不要用建造者模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • 创建型模式:建造者模式

    个人公众号原文:创建型模式:建造者模式 五大创建型模式之四:建造者模式。 简介 姓名 :建造者模式 英文名 :Bu...

网友评论

      本文标题:建造者模式

      本文链接:https://www.haomeiwen.com/subject/sylqoktx.html