【软考】设计模式之生成器模式

1. 说明
  • 1.生成器模式(Builder Pattern),也称为建造者模式,是设计模式中的一种创建型模式
  • 2.将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • 3.它主要用于构建复杂对象,通过将复杂对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。
  • 4.
2. 应用场景
  • 1.当一个类的构造函数包含多个参数,或者这些参数是相互依赖的,或者创建对象的步骤很多时,使用生成器模式可以简化对象的创建过程
  • 2.当创建的复杂对象内部状态之间的变化相互依赖时,使用生成器模式可以更加灵活地构建对象。
  • 3.当一个对象需要被构建成不同的表示时,使用生成器模式可以轻松地通过不同的生成器来创建不同的表示。
3. 结构图

在这里插入图片描述

4. 构成
  • 1.抽象生成器(Builder)角色:为创建一个Product对象的各个部件指定抽象接口。
  • 2.具体生成器(Concrete Builder)角色:实现 Builder 的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,提供一个检索产品的接口。
  • 3.指挥者(Director)角色(可选):构造一个使用 Builder 接口的对象。负责安排已有模块的顺序,然后告诉Builder开始构建。
  • 4.产品(Product)角色:表示被构建的复杂对象。它包含多个组成部件的声明,如汽车的轮子、引擎和车身等。
5. 适用性
  • 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 2.当构造过程必须允许被构造的对象有不同的表示时。
  • 3.当一个类的构造函数包含多个参数,或者这些参数是相互依赖的,或者创建对象的步骤很多时,使用生成器模式可以简化对象的创建过程。
  • 4.当创建的复杂对象内部状态之间的变化相互依赖时,使用生成器模式可以更加灵活地构建对象。
  • 5.当一个对象需要被构建成不同的表示时,使用生成器模式可以轻松地通过不同的生成器来创建不同的表示。
6. 优点
  • 1.封装性:生成器模式封装了复杂对象的创建过程,使得客户端代码更加简洁。
  • 2.灵活性:通过提供不同的生成器,可以创建不同的对象,而无需修改现有的构建代码。
  • 3.可维护性:由于构建过程被分离出来,因此更容易理解和维护。
  • 4.可扩展性:能够轻松地扩展新类型的对象,而无需修改现有的代码结构。
7. 缺点
  • 1.造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
8. java示例
public class Person {  
    private String name;  
    private int age;  
    private String email;  
  
    // 私有构造函数,防止外部直接实例化  
    private Person(PersonBuilder builder) {  
        this.name = builder.name;  
        this.age = builder.age;  
        this.email = builder.email;  
    }  
  
    // Getter方法  
    public String getName() {  
        return name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public String getEmail() {  
        return email;  
    }  
  
    // Builder内部类  
    public static class PersonBuilder {  
        private String name;  
        private int age;  
        private String email;  
  
        // 链式方法设置属性  
        public PersonBuilder withName(String name) {  
            this.name = name;  
            return this;  
        }  
  
        public PersonBuilder withAge(int age) {  
            this.age = age;  
            return this;  
        }  
  
        public PersonBuilder withEmail(String email) {  
            this.email = email;  
            return this;  
        }  
  
        // 构建Person对象  
        public Person build() {  
            return new Person(this);  
        }  
    }  
  
    // 为了方便使用,提供一个静态方法返回PersonBuilder实例  
    public static PersonBuilder builder() {  
        return new PersonBuilder();  
    }  
}
public class BuilderPatternDemo {  
    public static void main(String[] args) {  
        Person person = Person.builder()  
                .withName("John Doe")  
                .withAge(30)  
                .withEmail("johndoe@example.com")  
                .build();  
  
        System.out.println("Name: " + person.getName());  
        System.out.println("Age: " + person.getAge());  
        System.out.println("Email: " + person.getEmail());  
    }  
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王佑辉

老板,赏点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值