设计模式之建造型-建造者模式(4)

今天学习介绍建造者模式,该模式也是创建型模式之一。

定义:将一个复杂的对象的构建与他的表示分离开来,使得同样的创建过程,可以创建不同的表示

建造者模式是一步一步创建一个复杂的对象,它允许人们指定复杂对象的类型和内容就可以构建它们,用户不需要知道其内部的构建的细节。


首先贴上该模式的UML图


其中

Builder :建造者抽象类

ConcreteBuilder: builder实现类,具体的建造者

Director:指挥者,负责保证负责对象各个部分按照某种顺序创建

Product:产品

下面我们还是举手机的例子来用代码实现建造者模式,我们知道手机是由CPU,屏幕,主板,电池大致组成的

首先,我们创建product类

public class PhoneProduct {
    //产品类

    String cpu;
    //主板
    String mainBoard;
    //屏幕
    String screen;
    //电池
    String battery;
    public String getCpu() {
        return cpu;
    }

    public String getMainBoard() {
        return mainBoard;
    }

    public String getScreen() {
        return screen;
    }

    public String getBattery() {
        return battery;
    }

    public void setCpu(String cpu) {

        this.cpu = cpu;
    }

    public void setMainBoard(String mainBoard) {
        this.mainBoard = mainBoard;
    }

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

    public void setBattery(String battery) {
        this.battery = battery;
    }

  

}
这个类中包含的get set方法,

然后我们创建接口类Builder

public interface Builder {
    void setCpu(String cpuName);
    void setMainboard(String cpuName);
    void setScreen(String cpuName);
    void setBattery(String cpuName);
    PhoneProduct getPhone();

}
以及他的实现类

public class Concretebuilder implements Builder{

    private final PhoneProduct phoneProduct;

    public Concretebuilder() {
        phoneProduct = new PhoneProduct();
    }

    @Override
    public void setCpu(String cpuName) {
      phoneProduct.setCpu(cpuName);
    }

    @Override
    public void setMainboard(String cpuName) {
        phoneProduct.setMainBoard(cpuName);
    }

    @Override
    public void setScreen(String cpuName) {
        phoneProduct.setScreen(cpuName);

    }

    @Override
    public void setBattery(String cpuName) {

        phoneProduct.setBattery(cpuName);
    }

    @Override
    public PhoneProduct getPhone() {
        return phoneProduct;
    }
}
最后我们创建指挥者Director

public class Director {
    private Builder builder;

    public Director  setBuilder(Builder builder){
         this.builder=builder;
        return this;

     }
     public  PhoneProduct ceratXiaoMiProduct(){
         this.builder.setBattery("小米的电池");
         this.builder.setScreen("小米的屏幕");
         this.builder.setCpu("小米的CPU");
         this.builder.setMainboard("小米的主板");
         return builder.getPhone();
     }
    public  PhoneProduct ceratHuaweiMiProduct(){
        this.builder.setBattery("华为的电池");
        this.builder.setScreen("华为的屏幕");
        this.builder.setCpu("华为的CPU");
        this.builder.setMainboard("华为的主板");
        return builder.getPhone();
    }

}

其中有两个方法可以创建不同的手机

测试调用类

public class Test {
    public static void main(String[] args) {
        Builder builder=new Concretebuilder();
        Director director=new Director();
        PhoneProduct huaweiPhone = director.setBuilder(builder).ceratHuaweiMiProduct();
        PhoneProduct xiaoMiPhone = director.setBuilder(builder).ceratXiaoMiProduct();


    }
}

我们通过Director类的方法,完成了复杂实例的创建。一方面隔离了客户与生产过程,另一方面负责产品的生产过程。

与抽象工厂模式对比,建造者模式返回的是一个组装好的完整产品,而抽象工厂模式返回的是一系列相关的产品,这些产品组成了一个产品族

安卓中alertDialog 的创建使用即用到了建造者模式。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值