建造者模式
Posted love-htt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建造者模式相关的知识,希望对你有一定的参考价值。
先说下建造者模式各个角色类比。
建造者模式
1.有一个对外的统一管理者 Manger 类比:包工头 对客户来说的唯一对接人,所以代码中 只和它对接
2.抽象建造者 AbstractBuilder ,施工队,该施工队可以完成大厦各个部分的组成,如水泥,木工,钢筋工等工种 去完成对应的活。
3.具体建造者 具备完成某种建造能力的Builder 具体的某一施工队。里面 有各种建筑工人种类。
4.最终构建完成的产品Product 大厦完成所需要的组成部分。各组成部分由对应施工队完成
现在已大厦作为类比:
完成大厦需要的零部件 假如有俩种:木头,水泥。
调用流程: 包工头接到一个工程。
然后包工头去找了 一个施工队。施工队中有各种工种,各种工人。
去完成对应的大厦组成部件,
然后将部件组装起来。
大厦完成。
1.设计思路
先定义大厦需要的组成部分
把活派给包工头
包工头找来施工队
施工队完成大厦组成
交付
优点:
代码灵活,可读性 高可以很灵活的完成复杂产品的整体的某个组成的快速迭代
缺点
产品过于复杂的话,可能就导致定义很多的具体建造类。
和抽象工厂的比较 建造者模式专注于某一个产品的完整创建。
抽象工厂是完成一系列产品的生产过程。
在实战中 我们一般都是出于包工头的角色。
代码实战:
// 要完成的某一复杂产品
public class DaSha { private String mutou; private String shuini; private String gangjin; public String getMutou() { return mutou; } public void setMutou(String mutou) { this.mutou = mutou; } public String getShuini() { return shuini; } public void setShuini(String shuini) { this.shuini = shuini; } public String getGangjin() { return gangjin; } public void setGangjin(String gangjin) { this.gangjin = gangjin; } @Override public String toString() { return "我完成建造了"+mutou+shuini+gangjin; } }
/** * 抽象建造者,完成整个大厦完成 需要的的建筑能力 施工队需要具备的能力 * 里面有各种 完成复杂产品的建造者具备的能力
/** * 某一施工队完成 具体的施工队 */ public class BuilderA extends AbsractBuilder { @Override public void buildmutou() { daSha.setMutou("BuilderA 施工队 完成木工"); } @Override public void buildshuini() { daSha.setShuini("BuilderA 施工队 完成水泥工"); } @Override public void buildgangjin() { daSha.setGangjin("BuilderA 施工队 完成钢筋工"); } }
/** * 包工头统一对外接口 包工头验收交付 */ public class Baogongtou { private AbsractBuilder builder; public Baogongtou(AbsractBuilder builders) { this.builder = builders; } /** * 包工头完成最后交付工作 * * @return */ public DaSha getResult() { builder.buildmutou(); builder.buildshuini(); builder.buildgangjin(); return builder.getResult(); } }
*/ public abstract class AbsractBuilder { //创建的产品对象 protected DaSha daSha=new DaSha(); //木工 public abstract void buildmutou(); //水泥 public abstract void buildshuini(); //钢筋 public abstract void buildgangjin(); public DaSha getResult(){ return daSha; } }
/** * 建造者模式测试 */ public class BuildTest { public static void main(String[] args) { Baogongtou baogongtou=new Baogongtou(new BuilderA()); System.out.println(baogongtou.getResult().toString()); } }
以上是关于建造者模式的主要内容,如果未能解决你的问题,请参考以下文章