建造者模式是23种设计模式中创建型模式的一种,它关注的是对象创建的步骤,将一个复杂的对象抽象出来,一步步地把一个复杂的对象创建出来。
二.生活中的建造者模式
1.音乐
每一首动人的歌曲都是通过由一个个美妙的音符组合而成,使用相同音符但是不同循序组合而成的歌曲也会是不同的歌曲,而这样形成的歌曲就像是设计模式中的建造者模式。
2.国粹
麻将是中国的国粹。麻将的打法不同地区不一样,个数也不一样,但是总归分为那么几类牌,而不同的牌能够组合成不同的胡牌的牌型,而通过不同的的麻将子形成的胡牌牌型就像是设计模式中的建造者模式。
3.LEGO
乐高(LEGO),知名的老少皆宜的玩具,乐高积木是由一块块的小积木拼接成一个个的成品模型,根据每个人的动手能力和想象力拼出来的成品也会不一样。由不同积木组合而成的乐高成品就像是设计模式中的建造者模式。
三.建造者模式的实现
接下来以一个人型乐高的模型来举例,用建造者模式来实现。先创建一个产品角色乐高类
package com.qianfeng.ran;
/\*
\* @author:江帅
\* 产品角色
\* 乐高类
\*/
public class Lego {
//头部
private String head;
//躯干
private String body;
//手部
private String hand;
//脚部
private String foot;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getHand() {
return hand;
}
public void setHand(String hand) {
this.hand = hand;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
@Override
public String toString() {
return "Lego{" +
"head='" + head + '\'' +
", body='" + body + '\'' +
", hand='" + hand + '\'' +
", foot='" + foot + '\'' +
'}';
}
}
接下来创建抽象建造者和具体建造者钢铁侠乐高类
package com.qianfeng.ran;
/\*\*
\* @author:江帅
\*
\* 抽象建造者
\* 建造乐高模型的接口,规定创建人型乐高模型的规范
\*/
public interface BuilderLego {
//创建头部
void buildHead();
//创建躯干
void buildBody();
//创建手部
void buildHand();
//创建脚部
void buildFoot();
/\*\*
\* 返回创建的乐高模型
\*/
Lego getLego();
}
/\*
\* @author:江帅
\* 具体建造者
\* 钢铁侠乐高
\*/
class IronManLego implements BuilderLego {
private Lego lego;
public IronManLego() {
//创建乐高对象
lego = new Lego();
}
@Override
public Lego getLego() {
return lego;
}
//------------通过规定的方法完成乐高模型的建造------------
@Override
public void buildHead() {
lego.setHand("钢铁头盔(AI系统)");
}
@Override
public void buildBody() {
lego.setBody("钢铁战衣(集束炮)");
}
@Override
public void buildHand() {
lego.setHead("钢铁手套(电弧脉冲炮)");
}
@Override
public void buildFoot() {
lego.setFoot("钢铁战靴(推进器)");
}
}
/\*
\* @author:江帅
\* 具体建造者
\* 高达乐高
\*/
class GunDamLego implements BuilderLego{
private Lego lego;
public GunDamLego() {
//创建乐高对象
lego = new Lego();
}
@Override
public Lego getLego() {
return lego;
}
//------------通过规定的方法完成乐高模型的建造------------
@Override
public void buildHead() {
lego.setHand("高达头部(驾驶舱)");
}
@Override
public void buildBody() {
lego.setBody("高达躯干(大口径光束加农炮)");
}
@Override
public void buildHand() {
lego.setHead("高达手部(盾牌)");
}
@Override
public void buildFoot() {
lego.setFoot("高达腿部(推进器)");
}
}
再创建一个指挥者乐高的指挥者类
package com.qianfeng.ran;
/\*
uildHand() {
lego.setHead("高达手部(盾牌)");
}
@Override
public void buildFoot() {
lego.setFoot("高达腿部(推进器)");
}
}
再创建一个指挥者乐高的指挥者类
package com.qianfeng.ran;
/\*