Android开发Android开发Android开发经验谈

Android 设计模式-建造者模式(Builder Patte

2018-08-10  本文已影响15人  Code猎人

定义

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

应用场景

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

UML

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

具体的产品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();
}

@Override
public void buildBasic() {
    product.setBasic("打好基础");
}

@Override
public void buildWalls() {
    product.setWall("砌墙");
}

@Override
public void roofed() {
    product.setRoofed("封顶大吉");
}

@Override
public 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被大量使用到,就是利用其构建和标识的分离特性,充分理解优缺点以后童鞋们可以考虑在实际项目中实际的去使用吧。

上一篇 下一篇

猜你喜欢

热点阅读