5.建造者模式Builder

本文介绍如何使用建造者模式简化游戏地图的设计过程,通过解耦对象创建与表示,实现不同风格的地图构建,如中国风地图。该模式允许在不改变构建流程的情况下创建多种类型的产品。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

意图:将复杂的对象构建与表示分离,只需要传入需要的建造工具,对于内部是如何创建成成品的,调用者无需关心
角色:1.产品类 2.抽象的Builder类 3.Builder的实现类 4.统一的组装过程类

情景:很多游戏在不同的节日都会有一些不同的变化,比如圣诞节的时候英雄联盟中王者峡谷地图的小兵会戴上帽子,河道草丛等会有积雪,中国春节的时候地图中又会变成大红色,和一些其他的中国风的装饰,这种其实可以用建造者模式来实现

产品类:这里就是英雄联盟的地图
public class MapBuilder {
private String sapperStyle;
private String mapColor;

public void setSapperStyle(String sapperStyle) {
this.sapperStyle = sapperStyle;
}

public void setMapColor(String mapColor) {
this.mapColor = mapColor;
}

public String getSapperStyle() {
return sapperStyle;
}

public String getMapColor() {
return mapColor;
}
}

规范产品组建类:地图种的小兵和地图样式
/**
* Created by LSX on 2018/5/8.
*/
public interface GameMapBuilder {
void sapperStyle();//小兵装饰
void mapColor();//地图颜色
}

具体组建实现的工具类:实现建造规范,创建自己的建造内容,这里创建中国风的地图
/**
* Created by LSX on 2018/5/8.
*/

public class ConcreteBuilder implements GameMapBuilder {
private MapBuilder mMapBuilder=new MapBuilder();
@Override
public void sapperStyle() {
mMapBuilder.setSapperStyle("中国风的小兵");
}

@Override
public void mapColor() {
mMapBuilder.setMapColor("红色地图");
}
}


统一建造者:其实可以省略,直接用builder来建造
public class DirectorBuilder {
GameMapBuilder mGameMapBuilder;

public DirectorBuilder(GameMapBuilder gameMapBuilder) {
this.mGameMapBuilder = gameMapBuilder;
}

public GameMapBuilder createBuilder() {
mGameMapBuilder.sapperStyle();
mGameMapBuilder.mapColor();
return mGameMapBuilder;
}
}



调用:调用者只需要传入需要的工具类即可,不用关心内部是如何创建的
/**
* 建造者
*/
private void builderSimple() {
DirectorBuilder director = new DirectorBuilder(new ConcreteBuilder());
director.createBuilder();
}




这样就可以实现同一个地图类,根据不同需求,去创建不同的地图样式了


优点:简化复杂对象构建,对象本身与创建过程解耦,无需知道具体的 ,内部实现细节,相同的创建过程可以创建不同的产品对象
缺点:可能会产生多余的建造者和和构建过程对象




































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值