为了账号安全,请及时绑定邮箱和手机立即绑定

Android 设计模式-建造者模式(Builder Pattern)

标签:
Android

定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

应用场景

需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

UML

webp

从上图可以看出Builder是为创建一个Product对象的各个部件指定的抽象接口,Prodcut是具体的产品。Director是一个建造者,由它指挥使用BUilder。ConcreteBuilder是具体的建造,实现Builder接口的各个方法

  • Builder:为创建一个产品对象的各个部件指定抽象接口。

  • ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。

  • Director:构造一个使用Builder接口的对象。

  • Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

具体的产品Product

public class Product {private String basic;//地基private String wall;//墙private String roofed;//楼顶public String getBasic() {    return basic;
}public void setBasic(String basic) {    this.basic = basic;
}public String getWall() {    return wall;
}public void setWall(String wall) {    this.wall = wall;
}public String getRoofed() {    return roofed;
}public void setRoofed(String roofed) {    this.roofed = roofed;
}

}

抽象建造

public interface Builder {/**
 * 打基础
 */public void  buildBasic();/**
 * 砌墙
 */public void  buildWalls();/**
 * 封顶
 */public void  roofed();/**
 * 造房子
 * @return
 */public Product buildProduct();
}

具体建造

public class ConcreteBuilder implements Builder{private Product product;public ConcreteBuilder(){
    product=new Product();
}@Overridepublic void buildBasic() {
    product.setBasic("打好基础");
}@Overridepublic void buildWalls() {
    product.setWall("砌墙");
}@Overridepublic void roofed() {
    product.setRoofed("封顶大吉");
}@Overridepublic Product buildProduct() {    return product;
}

}

建造者

public class Director {public Product constructProduct(ConcreteBuilder concreteBuilder){
    concreteBuilder.buildBasic();
    concreteBuilder.buildWalls();
    concreteBuilder.roofed();    return concreteBuilder.buildProduct();
}
}

测试类

public class Director {public Product constructProduct(ConcreteBuilder concreteBuilder){
    concreteBuilder.buildBasic();
    concreteBuilder.buildWalls();
    concreteBuilder.roofed();    return concreteBuilder.buildProduct();
}
}

优点

  • 降低代码耦合度。在建造者模式中,客户端不需要知道产品内部是如何实现的,我们只需得到产品的对象。并且使用导演者和建造者分离组装过程和组件具体构造过程,具有灵活的扩展性。

  • 优秀的扩展性。具体建造者相互独立,方便扩展,符合开闭原则。

缺点

  • 一定的使用范围限制。建造者模式的产品的组件基本相同,如果产品的差异性较大,建造者模式就不适用了。

总结

建造者这种设计模式在很多三方框架Retrofit、Okhttop被大量使用到,就是利用其构建和标识的分离特性,充分理解优缺点以后童鞋们可以考虑在实际项目中实际的去使用吧。



作者:Code猎人
链接:https://www.jianshu.com/p/73f4ba3a6ee0


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消