什么是建造者模式
10年积累的成都做网站、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先
网站设计后付款的网站建设流程,更有
原阳免费网站建设让你可以放心的选择与我们合作。
所谓建造者模式,就是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的设计模式。建造者模式在构建过程中隐藏了复杂的实现细节,可以大大降低代码耦合度。
建造者模式的实现方式
《水浒传》讲述了的故事,梁山泊是一个不断壮大的队伍
先写一个Troops:
public abstract classTroops {
protectedString leader; protectedArrayList others= newArrayList<>(); protectedString purpose;
//领袖 public voidsetLeader(String leader) { this.leader= leader; }
//其他人 public voidsetOthers(String... others) { for(String other:others){ this.others.add(other); } }
//宗旨 public abstract voidsetPurpose();
@Override publicString toString() { return "Troops{"+ "leader='"+ leader+ '\''+ ", others="+ others.toString() + ", purpose='"+ purpose+ '\''+ '}'; } } |
这是梁山的Troops:
public classLiangshan extendsTroops {
protectedLiangshan(){}
@Override public voidsetPurpose() { purpose= "替天行道"; } } |
再写一个Builder:
public abstract classBuilder {
public abstract voidbuildLeader(String leader);
public abstract voidbuildOthers(String... others);
public abstract voidbuildPurpose();
public abstractTroops create();
} |
这是好汉们的Builder:
public classLiangshanBuilder extendsBuilder {
privateLiangshan liangshan;
@Override public voidbuildLeader(String leader) { liangshan.setLeader(leader); }
@Override public voidbuildOthers(String... others) { liangshan.setOthers(others); }
@Override public voidbuildPurpose() { liangshan.setPurpose(); }
@Override publicTroops create() { return liangshan; } } |
接下来写一个Director:
public classDirector {
Builder mBuilder= null;
publicDirector(Builder builder){ this.mBuilder= builder; }
public voidconstruct(String leader,String... others){ mBuilder.buildLeader(leader); mBuilder.buildOthers(others); mBuilder.buildPurpose(); }
} |
我们只需要如下代码便可以实现梁山好汉的大聚义:
Builder builder = newLiangshanBuilder(); Director director = newDirector(builder); director.construct("宋江","卢俊义","吴用","公孙胜"); Log.e("梁山",builder.create().toString()); |
在实际开发过程中,Director层常常被省略,由一个链式调用的Builder来进行对象的组装。我们这次用梁山好汉的对立面——方腊来举例,这次这么改写上文的Builder:
public classMingjiaoBuilder{ privateMingjiao mingjiao;
publicMingjiaoBuilder(){ mingjiao= newMingjiao(); }
publicMingjiaoBuilder buildLeader(String leader) { mingjiao.setLeader(leader); return this; }
publicMingjiaoBuilder buildOthers(String... others) { mingjiao.setOthers(others); return this; }
publicMingjiaoBuilder buildPurpose() { mingjiao.setPurpose(); return this; }
publicMingjiao create() { return mingjiao; } } |
当然,Troops是这样继承的:
public classMingjiao extendsTroops { @Override public voidsetPurpose() { this.purpose= "作乱犯上"; } } |
然后方腊作乱犯上的过程是这样的:
MingjiaoBuilder builder = newMingjiaoBuilder() //虽是妄称天子位 .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】状态模式——一个人的两幅面孔
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页名称:【设计模式与Android】建造者模式——建军大业-创新互联
URL地址:
http://cqcxhl.com/article/edhhp.html