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

你可能感兴趣的:(scala实现设计模式之抽象工厂方法)