scala实现建造器模式

package com.linewell.modeldesgin.builder

/**
* 建造者模式
* Created by ctao on 2015/8/8.
*/

/**
* 角色建造者
*/
trait ActorBuilder {
/**
* 角色
*/
protected var actor: Actor

/**
* 设置角色
*/
def buildRole(): Unit

/**
* 设置性别
*/
def buildSex(): Unit

/**
* 设置脸型
*/
def buildFace(): Unit

/**
* 设置服装
*/
def buildCostume(): Unit

//是否为光头
val BareHead = false

//设置发型
def buildHairStyle(): Unit

//创建角色
def createActor(): Actor

/**
* 控制枢纽,控制每一步的顺序
* @param ab 建造者
* @return 创建的角色
*/
def construct(ab: ActorBuilder): Actor = {
//先设置角色,再设置性别,其次是脸型,服装,用钩子程序判断是否是光头,不是光头则设置发型
ab.buildRole()
ab.buildSex()
ab.buildFace()
ab.buildCostume()
if (!ab.BareHead) {
ab.buildHairStyle()
}
ab.createActor()
}
}


/**
* 角色类
*/
class Actor {
//角色
var role: String = _
//性别
var sex: String = _
//脸型
var face: String = _
//服装
var costume: String = _
//发型
var hairstyle: String = "光头"

}

/**
* 英雄建造器
*/
object HeroBuilder extends ActorBuilder {

override protected var actor: Actor = new Actor()

override def buildRole() = actor.role = "英雄"

override def buildSex() = actor.sex = "男"

override def buildFace() = actor.face = "英俊"

override def buildCostume() = actor.costume = "盔甲"

override def buildHairStyle() = actor.hairstyle = "飘逸"

override def createActor() = actor
}

object DevilBuilder extends ActorBuilder{
override protected var actor: Actor = new Actor()

override def buildRole() = actor.role = "恶魔"

override def buildSex() = actor.sex = "妖"

override def buildFace() = actor.face = "丑陋"

override def buildCostume() = actor.costume = "黑衣"


override def buildHairStyle() = actor.hairstyle = "我想要头发"

/**
* 由于钩子程序的存在并不会执行buildHairStyle
*/
override val BareHead = true
override def createActor() = actor
}

object AngleBuilder extends ActorBuilder{
override protected var actor: Actor = new Actor()

override def buildRole() = actor.role = "天使"

override def buildSex() = actor.sex = "女"

override def buildFace() = actor.face = "漂亮"

override def buildCostume() = actor.costume = "白裙"

override def buildHairStyle() = actor.hairstyle = "长发"

override def createActor() = actor
}


package com.linewell.modeldesgin.builder

/**
* 测试客户端
* Created by ctao on 2015/8/8.
*/
object Client extends App {
/**
* 英雄构造器
*/
val ab1: ActorBuilder = HeroBuilder
val actor1 = ab1.construct(ab1)
println(actor1.role+"的外观:")
println("性别:"+actor1.sex)
println("面容:"+actor1.face)
println("服装:"+actor1.costume)
println("发型:"+actor1.hairstyle)

/**
* 天使构造器
*/
val ab2: ActorBuilder = AngleBuilder
val actor2 = ab2.construct(ab2)
println(actor2.role+"的外观:")
println("性别:"+actor2.sex)
println("面容:"+actor2.face)
println("服装:"+actor2.costume)
println("发型:"+actor2.hairstyle)

/**
* 恶魔构造器
*/
val ab3: ActorBuilder = DevilBuilder
val actor3 = ab3.construct(ab3)
println(actor3.role+"的外观:")
println("性别:"+actor3.sex)
println("面容:"+actor3.face)
println("服装:"+actor3.costume)
println("发型:"+actor3.hairstyle)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值