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;
/\*
\* @author:Ran
\* 指挥者
\* 乐高的指挥者
\*/
public class LegoDirector {
/\*\*
\* 创建乐高对象里的的具体内容
\* @param builderLego
\* @return
\*/
public Lego createLego(BuilderLego builderLego){
//创建头部
builderLego.buildHead();
//创建躯干
builderLego.buildBody();
//创建手部
builderLego.buildHand();
//创建脚部
builderLego.buildFoot();
//返回已构建完毕的乐高对象
return builderLego.getLego();
}
}
最后通过建造者模式来创建我们需要的乐高对象。
package com.qianfeng.ran;
/\*
\* @author:江帅
\*
\* 客户端
\*/
public class Demo {
public static void main(String[] args) {
//创建管理者
LegoDirector legoDirector = new LegoDirector();
//-------创建钢铁侠的乐高模型------
Lego lego1 = legoDirector.createLego(new IronManLego());
\* 客户端
\*/
public class Demo {
public static void main(String[] args) {
//创建管理者
LegoDirector legoDirector = new LegoDirector();
//-------创建钢铁侠的乐高模型------
Lego lego1 = legoDirector.createLego(new IronManLego());