设计模式之建造者模式

一.模式动机与定义 

1.动机与定义  

  • 建造者模式是最复杂的创建型模式,它只关注产品本身,而不去过多关注产品如何搭建,类似于将所有部件装配在一个产品中。 
  • 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。即可以创建同一类型(指各个组成部件相同)的不同产品。

2.模式结构

Product(产品角色):一个具体的产品
Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类
ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件,返回相应的产品。
Director(指挥者):构建一个使用Builder的对象,用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。


 

二.场景实例

  1. 背景:建造一台电脑,电脑类型有华为和联想,主要构件为主机和屏幕。

  2.  实例:

  • 创建产品类型 Computer
public class Computer {
    //主机
    private String mainframe;
    //屏幕
    private String screen;


    public Computer() {
    }

    public Computer(String mainframe, String screen) {
        this.mainframe = mainframe;
        this.screen = screen;
    }


    public String getMainframe() {
        return mainframe;
    }

    public void setMainframe(String mainframe) {
        this.mainframe = mainframe;
    }

    public String getScreen() {
        return screen;
    }

    public void setScreen(String screen) {
        this.screen = screen;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "mainframe='" + mainframe + '\'' +
                ", screen='" + screen + '\'' +
                '}';
    }
}
  • 创建抽象构建者 ComputerBuilder
public abstract class ComputerBuilder {
    Computer computer=new Computer();

    public void buildMainFrame(){
    }

    public void buildScreen(){

    }

    public Computer buildComputer(){
        return computer;
    }

}
  • 创建具体建造者  BuilderHuaWei
public class BuildHuaWei extends ComputerBuilder{
    @Override
    public void buildMainFrame() {
        computer.setMainframe("华为主机");
    }

    @Override
    public void buildScreen() {
        computer.setScreen("华为屏幕");
    }
}
  • 创建具体建造者 BuilderLegion
public class BuildLegion extends ComputerBuilder{
    @Override
    public void buildMainFrame() {
        computer.setMainframe("联想主机");
    }

    @Override
    public void buildScreen() {
        computer.setScreen("联想屏幕");

    }

}
  • 创建指挥者 ComputerDirector
public class ComputerDirector {
    
    public static Computer getComputer(ComputerBuilder computerBuilder){
        computerBuilder.buildMainFrame();
        computerBuilder.buildScreen();
      return computerBuilder.buildComputer();
    }
}

三.模式应用

1.总结

建造者模式重要的一点在于抽象构建者,这里定义了产品的具体配件以及配件的装配,而另一点则是指挥者,指挥者具体操作配件的装配顺序以及产品的实现。

其中心思想在于产品的框架,框架本体不变,但是产品的具体内容可以变换 ,例如构造一辆汽车,关注的是车子本身的框架(部件构成方式),而具体用什么轮胎,发动机等可以一直替换。

2.适应场景

建造者模式核心作用就是对复杂对象(特指某几个对象组合而成的对象)的创建,抽出来单独实现,对于用户使用这类复杂对象是提供了方便,同时,这也在复杂对象的部分创建与整体组装之间搭了一座桥,实现了部分和整体组装的解耦。在复杂对象创建时起着重要作用,对简单产品的用处不大。

3.建造者模式与抽象工厂模式的比较

  • 建造者模式返回的是一个完整的组装好的产品,而抽象工厂模式返回一系列的产品,重点在于产品族。
  • 抽象工厂模式生产汽车配件,而建造者模式就是汽车的组装工厂,生产完整的汽车。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值