设计模式之建造者模式

作为码农中的一员,需要不断的学习。我在学习之余把关于自己阅读《大话设计模式》的笔记和自己的一些总结 写成博客和大家分享,也希望采用这种方式记录自己的学习之旅。本文仅供学习交流使用,侵权必删。不用于商业目的,转载请注明出处。

建造者模式

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式就是是将一个复杂的对象分解为多个简单的对象,然后通过具体建造者类一步一步构建而成。
建造者模式主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
建造者(Builder)模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。

建造者模式的类图

建造者模式

  • 接口类Builder 为建造者,定义了创建产品各个子部件的抽象方法的接口。
  • ConcreteBuilderBConcreteBuilderA为具体建造者,它们实现了 Builder接口,并对创建子部件的方法进行了实现。
  • Product 为具体的产品,一般包含多个组成部件。
  • Director为指挥者,是构建一个使用Builder接口的对象。

建造者模式的代码

// 具体的产品对象,由两部分组成
public class Product {
    String message = "";
    String address = "";
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}
// 构建者
public interface Builder {
    public void builderProductMessage();
    public void builderProductAddress();
    public Product getResult();
}
// 具体构建者A
public class ConcreteBuilderA implements Builder {
    private Product product = new Product();
    @Override
    public void builderProductMessage() {
        product.setMessage("通过具体建造类A 构建一个产品基本信息");
    }
    @Override
    public void builderProductAddress() {
        product.setAddress("通过具体建造类A 构建一个产品的地址");
    }
    @Override
    public Product getResult() {
        return product;
    }
}
// 具体构建者B
public class ConcreteBuilderB implements Builder {
    private Product product = new Product();
    @Override
    public void builderProductMessage() {
        product.setMessage("通过具体建造类B 构建一个产品基本信息");
    }
    @Override
    public void builderProductAddress() {
        product.setAddress("通过具体建造类B 构建一个产品的地址");
    }
    @Override
    public Product getResult() {
        return product;
    }
}
// 指挥者
public class Director {
    private Builder builder;
    public Director(Builder builder) {
        this.builder = builder;
    }
    public Product construct(){
        builder.builderProductMessage();
        builder.builderProductAddress();
        return builder.getResult();
    }
}
public class Test {
    public static void main(String[] args) {
        //Builder builder = new ConcreteBuilderB();
        Builder builder = new ConcreteBuilderA(); // 选定具体构建
        Director director = new Director(builder);// 交给指挥者进行调度
        Product product = director.construct();

        System.out.println(product.getMessage());
        System.out.println(product.getAddress());
    }
}

建造者模式的优缺点

优点

  • 每个具体建造者是相互独立的,有利于系统的扩展
  • 用户只需要指定需要建造的类型 就可以得到它们,而具体建造的过程和细节不需要知道,方便维护。
  • 可以更加精细化控制产品的创建过程。
  • 增加具体的建造者类时无需要修改源代码,满足开闭原则

缺点

  • 产品的组成结构必须相同,限制了使用范围。
  • 如果产品的内部变化复杂,该模式会增加很多的建造者类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值