5.建造者模式Builder

意图: 将复杂的对象构建与表示分离,只需要传入需要的建造工具,对于内部是如何创建成成品的,调用者无需关心
角色: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、付费专栏及课程。

余额充值