scala实现设计模式之装饰者模式

来源:互联网 发布:吾生而有涯而知而无涯 编辑:程序博客网 时间:2024/05/29 02:02
package com.linewell.modeldesgin.decorator/** * 抽象界面构件类 * Created by ctao on 2015/8/16. */trait Component {    def display(): Unit}/** * 窗口具体构件类 */class Window extends Component {    override def display(): Unit = println("显示窗口")}/** * 文本框具体构件类 */class TextBox extends Component {    override def display(): Unit = println("显示文本框")}/** * 列表具体构件类 */class ListBox extends Component {    override def display(): Unit = println("显示列表框")}/** * 构件装饰样例类 * @param component 抽象构件 */case class ComponentDecorator(component: Component) extends Component {    /**     * 复写display方法,调用抽象构建的方法     */    override def display(): Unit = component.display()}/** * 滚动条装饰类 * @param component 抽象构件 */class ScrollBarDecorator(component: Component) extends ComponentDecorator(component) {    /**     * 复写父类方法,在复写的方法中调用自己的独有方法     */    override def display() = {        scrollBar()        super.display()    }    /**     * 自己独有方法     */    def scrollBar() = println("为构件增加滚动条")}/** * 黑色边框装饰类 * @param component 抽象构件 */class BlackBorderDecorator(component: Component) extends ComponentDecorator(component) {    override def display() = {        blackBorder()        super.display()    }    def blackBorder() = println("为构件增加黑色边框")}
package com.linewell.modeldesgin.decorator/** * 测试客户端 * Created by ctao on 2015/8/16. */object Client extends App {    /**     * 窗口     */    val component: Component = new Window    /**     * 滚动条来装饰窗口     */    val componentSB: Component = new ScrollBarDecorator(component)    /**     * 黑色边框装饰滚动条装饰类     */    val componentBB: Component = new BlackBorderDecorator(componentSB)    componentBB.display()}
0 0
原创粉丝点击