您的位置:首页 > 其它

scala实现设计模式之抽象工厂方法

2015-08-08 15:54 141 查看
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()
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: