设计模式之建造者模式

如果我们创建一个实体类的时候,需要设置数据库环境,设置系统变量环境,设置用户自定义变量等多个步骤,可以在构造函数中去完成这些过程,但是如果把这些步骤全部都塞到一个构造函数中,有些不大好,比如有的子类可能只要其中的几个步骤,这样的话最理想的情况是这些设置步骤可选,怎么做呢,上代码了

/**
 * 建造者设计模式
 * 如果一个类的构建需要很多步骤,应该将步骤拆分开进行解耦
 */
public class Main {

    public static void main(String[] args) {
        //普通的建造者模式
        AnimalDirector animalDirector = new AnimalDirector();
        Animal animal1 = animalDirector.constructAnimal(new AnimalBuilder());
        System.out.println(animal1);

        //带链式操作的建造者模式
        AnimalLinkDirector animalLinkDirector = new AnimalLinkDirector();
        Animal animal2 = animalLinkDirector.constructAnimal(new AnimalLinkBuilder());
        System.out.println(animal2);
    }

}

public class Animal {

    private String type;

    private String color;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "type='" + type + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}

public interface IAnimalBuilder {

    void buildAnimal(String animal);

    void buildColor(String color);

    Animal buildAnimal();
}

public class AnimalBuilder implements IAnimalBuilder{

    private Animal animal;

    public AnimalBuilder(){
        animal = new Animal();
    }

    @Override
    public void buildAnimal(String animal) {
        this.animal.setType(animal);
    }

    @Override
    public void buildColor(String color) {
        this.animal.setColor(color);
    }

    @Override
    public Animal buildAnimal() {
        return animal;
    }
}

public class AnimalDirector {
    public Animal constructAnimal(IAnimalBuilder animalBuilder) {
        animalBuilder.buildAnimal("cat");
        animalBuilder.buildColor("white");
        return animalBuilder.buildAnimal();
    }
}

public interface IAnimalLinkBuilder {

    IAnimalLinkBuilder buildAnimal(String animal);

    IAnimalLinkBuilder buildColor(String color);

    Animal buildAnimal();
}

public class AnimalLinkBuilder implements IAnimalLinkBuilder{

    private Animal animal;

    public AnimalLinkBuilder(){
        animal = new Animal();
    }

    @Override
    public AnimalLinkBuilder buildAnimal(String animal) {
        this.animal.setType(animal);
        return this;
    }

    @Override
    public AnimalLinkBuilder buildColor(String color) {
        this.animal.setColor(color);
        return this;
    }

    @Override
    public Animal buildAnimal() {
        return animal;
    }
}

public class AnimalLinkDirector {
    public Animal constructAnimal(IAnimalLinkBuilder animalLinkBuilder) {
        /**
         * 链式操作,返回的是this,这样操作直观简单
         */
        return animalLinkBuilder.buildAnimal("dog").buildColor("black").buildAnimal();
    }
}

用法:
以上的代码展示了两种建造者模式,其中有一种用到了链式操作,初学者很容易觉得这种链式操作挺神秘的,其实很容易,就是返回类的this对象而已,最典型的就是jquery中的链式操作,建造者模式可以看成是windows的设置向导,一步步完成了我们所需要的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值