设计模式 建造者模式

建造者模式介绍

  • 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式.
    定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
要解决的问题

建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。

建造者模式原理

建造者(Builder)模式包含以下4个角色 :

  • 抽象建造者类(Builder):这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的部件对象的创建。
  • 具体建造者类(ConcreteBuilder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。在构造过程完成后,提供一个方法,返回创建好的负责产品对象。
  • 产品类(Product):要创建的复杂对象 (包含多个组成部件).
  • 指挥者类(Director):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建(客户端一般只需要与指挥者进行交互)。
建造者模式的优点包括:
  1. 封装性好:将复杂对象的创建过程封装在独立的建造者类中,使得对象的创建过程更加清晰和易于理解。
  2. 灵活性高:通过使用建造者模式,可以灵活地修改对象的创建过程,而不需要修改对象的具体表示。
  3. 可复用性强:建造者模式将对象的创建过程分解为多个步骤,可以将这些步骤封装在独立的建造者类中,从而提高了代码的可复用性。
建造者模式的缺点包括:
  1. 类的数量增多:由于将对象的创建过程分解为多个步骤,并将这些步骤封装在独立的建造者类中,因此需要创建多个建造者类,从而增加了类的数量。
  2. 建造过程复杂:如果对象的创建过程过于复杂,可能会导致建造者类的建造过程也变得复杂,从而增加了代码的维护难度。
创建继承类
public abstract class AbstractBuider {
    protected Buider buider = new Buider();
	
    public abstract  void setBuider();

    public abstract void setName();
    
    public abstract void setAge();

    public abstract Buider getBuider();

}
继承并分别去实现然后去进行不同的改动

package BuilderModel;

public class RealizeBuilder2 extends AbstractBuider{
    @Override
    public void setBuider() {
        this.buider = new Buider();
    }

    @Override
    public void setName() {
        buider.setName("李四");
    }

    @Override
    public void setAge() {
        buider.setAge("123111");
    }

    @Override
    public Buider getBuider() {
        return buider;
    }
}

public class RealizeBuilder1 extends AbstractBuider {
    @Override
    public void setBuider() {
        this.buider = new Buider();
    }

    @Override
    public void setName() {
        buider.setName("张三");
    }

    @Override
    public void setAge() {
        buider.setAge("123");
    }

    @Override
    public Buider getBuider() {
        return buider;
    }
}

public class RealizeBuilder2 extends AbstractBuider{
    @Override
    public void setBuider() {
        this.buider = new Buider();
    }

    @Override
    public void setName() {
        buider.setName("李四");
    }

    @Override
    public void setAge() {
        buider.setAge("123111");
    }

    @Override
    public Buider getBuider() {
        return buider;
    }
}
封装一个统一调用类去分别实现
public class Director {

    private  AbstractBuider buider;

    public Director(AbstractBuider buider) {
        this.buider = buider;
    }

    public Buider construct() {
        buider.setBuider();
        buider.setAge();
        buider.setName();
        return buider.getBuider();
    }
}
具体执行
public static void main(String[] args) {
	Director director = new Director(new RealizeBuilder1());
	Director director1 = new Director(new RealizeBuilder2());
	Buider construct = director.construct();
	Buider construct1 = director1.construct();
	System.out.println(construct.toString());
	System.out.println(construct1.toString());
}

建造者模式可以让你以一种灵活的方式创建复杂的对象,同时也使得创建过程易于扩展和维护。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值