java设计模式 - 创建者(干货)

 深度讲解23种设计模式,力争每种设计模式都刨析到底。废话不多说,开始第二种设计模式 - 创建者。

 顾名思义,创建者模式是用来创建对象的。根据笔者的经验,这种创建模式适用于复杂对象的创建。

 我们先来看一下类图关系:

  

 当创建Person对象时(假设Person对象中有非常多的属性),而我们挨个属性设置的时候,就会非常麻烦,还有可能会出现不同属性是在不同阶段中来设置,

也就是分步来设置的时候,不但属性容易丢失,而且代码阅读会比较头疼,那么这个时候,创建者模式将会是你非常棒的选择。

 Person类如下

public class Person {
    private String name;

    private String interest;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getInterest() {
        return interest;
    }

    public void setInterest(String interest) {
        this.interest = interest;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", interest='" + interest + '\'' +
                '}';
    }
}
Person类

首先,我们可以抽象出一个接口类,提供分布创建接口。

public interface PersonBuilder {
    PersonBuilder buildBasic(String name);
    PersonBuilder buildOther(String interest);
    Person build();
}
接口类

接下来,接口实现

public class PersonSimpleBuilderImpl implements PersonBuilder {

    Person person = new Person();

    @Override
    public PersonBuilder buildBasic(String name) {
        person.setName(name);
        return this;
    }

    @Override
    public PersonBuilder buildOther(String interest) {
        person.setInterest(interest);
        return this;
    }

    @Override
    public Person build() {
        return person;
    }
}
接口实现1
public class PersonComplexBuilderImpl implements PersonBuilder {

    Person person = new Person();

    @Override
    public PersonBuilder buildBasic(String name) {
        person.setName("sys" + name);
        return this;
    }

    @Override
    public PersonBuilder buildOther(String interest) {
        person.setInterest(interest);
        return this;
    }

    @Override
    public Person build() {
        return person;
    }
}
接口实现2

Director类

public class Director {
    private PersonBuilder personBuilder;

    public Director(PersonBuilder personBuilder) {
        this.personBuilder = personBuilder;
    }

    public Person buildPersonBasic(String name){
        return personBuilder.buildBasic(name).build();
    }
    public Person buildPersonOther(String other){
        return personBuilder.buildOther(other).build();
    }
}
Director

测试类

public class Test {
    public static void main(String[] args) {
        Person person = new PersonSimpleBuilderImpl().buildBasic("张三").buildOther("篮球").build();
        System.out.println(person);
        Person person1 = new PersonComplexBuilderImpl().buildBasic("张三").buildOther("篮球").build();
        System.out.println(person1);
        Director d = new Director(new PersonComplexBuilderImpl());
        Person person2 = d.buildPersonBasic("李四");
        System.out.println(person2);
    }
}
测试类

测试结果:

 

 笔者个人比较喜欢这种链式调用。

创建者模式比较简单,自然而然应用即可,可以不创建Director,直接使用链式编程,具体需要看业务场景。

也许这里的例子不是100%完美,但最重要的是细细体会该设计模式解决的问题。

 

posted @ 2020-03-08 21:05  江流大海_浮萍如尘  阅读(369)  评论(0编辑  收藏  举报