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()
}

猜你喜欢

转载自cjuexuan.iteye.com/blog/2233757