什么是建造者模式

 

所谓建造者模式,就是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的设计模式。建造者模式在构建过程中隐藏了复杂的实现细节,可以大大降低代码耦合度。

 

建造者模式的实现方式

 

《水浒传》讲述了的故事,梁山泊是一个不断壮大的队伍

先写一个Troops:

public abstract class Troops {

    
protected String leader;
    
protected ArrayList others = new ArrayList<>();
    
protected String purpose;

    
//领袖
    public void setLeader(String leader) {
        
this.leader = leader;
    }

    
//其他人
    public void setOthers(String... others) {
        
for (String other:others){
            
this.others.add(other);
        }
    }

    
//宗旨
    public abstract void setPurpose();


    
@Override
    
public String toString() {
        
return "Troops{" +
                
"leader='" + leader + '\'' +
                
", others=" + others.toString() +
                
", purpose='" + purpose + '\'' +
                
'}';
    }
}

 

这是梁山的Troops:

public class Liangshan extends Troops {

    
protected Liangshan(){}

    
@Override
    
public void setPurpose() {
        
purpose = "替天行道";
    }
}

 

再写一个Builder:

public abstract class Builder {

    
public abstract void buildLeader(String leader);

    
public abstract void buildOthers(String... others);

    
public abstract void buildPurpose();

    
public abstract Troops create();

}

 

这是好汉们的Builder:

public class LiangshanBuilder extends Builder {

    
private Liangshan liangshan;

    
@Override
    
public void buildLeader(String leader) {
        
liangshan.setLeader(leader);
    }

    
@Override
    
public void buildOthers(String... others) {
        
liangshan.setOthers(others);
    }

    
@Override
    
public void buildPurpose() {
        
liangshan.setPurpose();
    }

    
@Override
    
public Troops create() {
        
return liangshan;
    }
}

 

接下来写一个Director:

public class Director {

    Builder
mBuilder = null;

    
public Director(Builder builder){
        
this.mBuilder = builder;
    }

    
public void construct(String leader,String... others){
        
mBuilder.buildLeader(leader);
        
mBuilder.buildOthers(others);
        
mBuilder.buildPurpose();
    }

}

 

我们只需要如下代码便可以实现梁山好汉的大聚义:

Builder builder = new LiangshanBuilder();
Director director =
new Director(builder);
director.construct(
"宋江","卢俊义","吴用","公孙胜");
Log.
e("梁山",builder.create().toString());

 

在实际开发过程中,Director层常常被省略,由一个链式调用的Builder来进行对象的组装。我们这次用梁山好汉的对立面——方腊来举例,这次这么改写上文的Builder:

public class MingjiaoBuilder{
    
private Mingjiao mingjiao;

    
public MingjiaoBuilder(){
        
mingjiao = new Mingjiao();
    }

    
public MingjiaoBuilder buildLeader(String leader) {
        
mingjiao.setLeader(leader);
        
return this;
    }

    
public MingjiaoBuilder buildOthers(String... others) {
        
mingjiao.setOthers(others);
        
return this;
    }

    
public MingjiaoBuilder buildPurpose() {
        
mingjiao.setPurpose();
        
return this;
    }

    
public Mingjiao create() {
        
return mingjiao;
    }
}

 

当然,Troops是这样继承的:

public class Mingjiao extends Troops {
    
@Override
    
public void setPurpose() {
        
this.purpose = "作乱犯上";
    }
}

 

然后方腊作乱犯上的过程是这样的:

MingjiaoBuilder builder = new MingjiaoBuilder()
        
//虽是妄称天子位
        .buildLeader("方腊")
        
//也须伪列宰臣班
        .buildOthers("石宝","邓元觉","方杰")
        .buildPurpose();
Log.
e("明教",builder.create().toString());

 

 

Android源码中的建造者模式

 

1)AlertDialog.Builder

AlertDialog.Builder是Android源码中最常见的建造者模式,调用方式不再赘述。不过请注意这个建造者模式中并没有Director层的出现,因此这是一种简化的建造者模式。

 

Android开发中如何利用建造者模式

 

1)建造者模式具备封装性良好的优点。在一个对象的初始化特别复杂、并且很多参数都有默认值时的优势非常明显。

 

2)建造者模式还具备Builder独立、易于扩展的优点。可以在几个setter方法执行顺序不同时产生不同的结果。

 

需要注意的几个问题

 

1)建造者模式会产生多余的Builder对象和Director对象,是典型的用运行效率换开发进度的设计模式


本系列其他博客

 


【设计模式与Android】原型模式——复制中心走出来的克隆人


【设计模式与Android】工厂方法模式——化工女神的工厂


【设计模式与Android】抽象工厂模式——嵌合体克隆工厂


【设计模式与Android】策略模式——锦囊里的上策中策下策


【设计模式与Android】状态模式——一个人的两幅面孔



更多相关文章

  1. android名词解释
  2. 寻找android中的设计模式(一)
  3. 戏说Android四大组件之Activity
  4. Android实现多个TextView同时显示跑马灯效果
  5. mmsplayer for ios 版本已经完成。支持iphone,ipod touch,ipad
  6. Activity的4种launchMode
  7. android中的启动模式
  8. android crash自动化分析
  9. Android启动模式总结

随机推荐

  1. android 中如何解析Rss订阅的xml文件
  2. android新手学习帮助网址
  3. android 图片灰度处理的处理
  4. Android(安卓)DownloadManager下载并安装
  5. network: android 网络判断
  6. Android(安卓)RecyclerView 报错:java.lan
  7. android WebSocketClient和TCP协议Socket
  8. android 通过滚动条改变图片显示
  9. Android处理scrollciew里嵌套ExpandableL
  10. Android(安卓)调用其他应用-QQ音乐