scala实现抽象工厂

package com.linewell.modeldesgin.abstractfactory

/**
* Created by ctao on 2015/8/8.
* 抽象工厂模式
*/

/**
* 皮肤工厂特质
*/
trait SkinFactory {
/**
* 创建按钮方法
* @return 按钮特质
*/
def createButton(): Button

/**
* 创建文本框方法
* @return 文本框特质
*/
def createTextField(): TextField
}

/**
* 按钮特质
*/
trait Button {
/**
* 展示方法
*/
def display(): Unit
}

/**
* 文本框特质
*/
trait TextField {
/**
* 展示方法
*/
def display(): Unit
}

/**
* 春天皮肤工厂,生产春天皮肤的文本框和按钮
*/
object SpringSkinFactory extends SkinFactory {

/**
* 春天皮肤按钮
*/
class SpringButton extends Button {
override def display(): Unit = println("spring button")
}

/**
* 春天皮肤文本框
*/
class SpringTextField extends TextField {
override def display(): Unit = println("spring textField")
}

/**
*复写方法,产生春天皮肤的按钮
* @return 按钮特质
*/
override def createButton(): Button = new SpringButton

/**
* 复写方法,产生春天皮肤的文本框
* @return 文本框特质
*/
override def createTextField(): TextField = new SpringTextField
}

/**
* 夏天皮肤工厂
*/
object SummerSkinFactory extends SkinFactory {

/**
* 夏天皮肤按钮
*/
class SummerButton extends Button {
override def display(): Unit = println("summer button")
}

/**
* 夏天皮肤文本框
*/
class SummerTextField extends TextField {
override def display(): Unit = println("summer textField")
}

/**
* 复写方法,产生夏天皮肤按钮
* @return 按钮特质
*/
override def createButton(): Button = new SummerButton

/**
* 复写方法,产生夏天皮肤文本框
* @return 文本框特质
*/
override def createTextField(): TextField = new SummerTextField
}


package com.linewell.modeldesgin.abstractfactory

/**
* Created by ctao on 2015/8/8.
* 测试客户端
*/
object Client extends App{
/**
* 构建皮肤工厂
*/
val factory :SkinFactory = SpringSkinFactory
/**
* 按钮的展示方法
*/
factory.createButton().display()

/**
* 文本框的方法
*/
factory.createTextField().display()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值