zoukankan      html  css  js  c++  java
  • kotlin面向对象实战~

    有了java的面向对象的基础,其实对于kotlin这块的东东比较好理解,所以这里以洗衣机洗衣服为例,对面向对象进行一下实战,下面开始。

    洗衣机初步:

    首先先新建一个洗衣机类:

    然后里面先定义基本属性:

    接下来则用一下这个类:

    接下来洗衣服之前得将门打开与关闭,则所这时需要在洗衣机类中增加开门和关闭的方法,如下:

    接下来则应该开始洗衣服,所以需要增加一个开始执行的方法,如下:

    至此洗衣机的基本流程已经写好了,但是还不够完善,比如门打开状态中就开始放水,那水得溢出来,因为只有门关上了才能感知到水位等等,接下来则会对这个类进行完善。

    洗衣机升级:

    如上面所描述的,在开始洗衣之前得确认门是否关着的,所以需要加一个变量用来记录门的开关状态,如下:

    这时测试一下效果,假装忘了关门了,如下:

    而现实中洗衣机是有模式选择的,对于洗内裤和洗牛仔裤洗法应该是完全不一样的,内裤得轻柔的洗,而牛仔裤得狂柔的洗,所以接下来给洗衣机增加模式选择功能,如下:

    有了模式之后,接下来洗衣服在不同的模式下其洗衣步骤也是不一样滴,所以修改下start()方法:

    /**
     * 洗衣机
     */
    class WashMachine(var module: String/* 品牌 */, var size: Int/* 容积:升为单位 */) {
        /* 门是否开着,默认开着 */
        var isDoorOpen = true
        /* 当前洗衣模式 */
        var currentMode = 0
    
        fun openDoor() {
            println("洗衣机的门已经打开了...")
            isDoorOpen = true
        }
    
        fun closeDoor() {
            println("洗衣机的门已经关闭了...")
            isDoorOpen = false
        }
    
        fun start() {
            if (isDoorOpen) {
                println("哔哔...门未关无法运行")
                return
            }
            when (currentMode) {
                0 -> println("选择模式错误,不能开始洗衣服")
                1 -> {
                    println("放水")
                    println("轻柔开始,发动机转速 慢")
                    println("洗完啦")
                }
                2 -> {
                    println("放水")
                    println("狂柔开始,发动机转速 快")
                    println("洗完啦")
                }
                else -> {
                    println("选择模式错误,不能开始洗衣服")
                }
            }
        }
    
        fun selectMode(mode: Int) {
            currentMode = mode
            when (mode) {
                0 -> println("初始模式,请您选择模式")
                1 -> println("轻柔")
                2 -> println("狂柔")
                else -> println("不要乱拧,拧坏了不保修呀!")
            }
        }
    }

    接下来咱们来测一下洗衣服,多条件:

    所以这时放完衣服之后将门关上,如下:

    接着选择一下模式,如下:

    洗衣机封装:

    目前洗衣机功能都已经写完了,但是仔细观察代码:

    对于发动机实际是属于洗衣机的一个内部组件,它有转速的概念,有必要对发现动的行为进行一个统一个封装,所以接下来重构一下目前的洗衣机代码:

    /**
     * 洗衣机
     */
    class WashMachine(var module: String/* 品牌 */, var size: Int/* 容积:升为单位 */) {
        /* 门是否开着,默认开着 */
        var isDoorOpen = true
        /* 当前洗衣模式 */
        var currentMode = 0
    
        fun openDoor() {
            println("洗衣机的门已经打开了...")
            isDoorOpen = true
        }
    
        fun closeDoor() {
            println("洗衣机的门已经关闭了...")
            isDoorOpen = false
        }
    
        fun start() {
            if (isDoorOpen) {
                println("哔哔...门未关无法运行")
                return
            }
            when (currentMode) {
                0 -> println("选择模式错误,不能开始洗衣服")
                1 -> {
                    println("放水")
                    println("轻柔开始,发动机转速 慢")
                    setMotorSpeed(100)
                    println("洗完啦")
                }
                2 -> {
                    println("放水")
                    println("狂柔开始,发动机转速 快")
                    setMotorSpeed(1000)
                    println("洗完啦")
                }
                else -> {
                    println("选择模式错误,不能开始洗衣服")
                }
            }
        }
    
        fun selectMode(mode: Int) {
            currentMode = mode
            when (mode) {
                0 -> println("初始模式,请您选择模式")
                1 -> println("轻柔")
                2 -> println("狂柔")
                else -> println("不要乱拧,拧坏了不保修呀!")
            }
        }
    
        fun setMotorSpeed(speed: Int) {
            println("当前发动机转速为 ${speed} 圈/秒")
        }
    }

    接下来做下测试:

    接下来洗牛仔裤并换一下模式看看:

    但是目前的设置转速对于用户来说是可以直接调用的,如下:

    所以这里就涉及到函数的访问修饰服的问题,如下:

    此时再看main方法:

    所以这就达到合理封装的目的~

  • 相关阅读:
    2.16.8.内核启动的C语言阶段5
    2.16.7.内核启动的C语言阶段4
    2.16.6.内核启动的C语言阶段3
    2.16.5.内核启动的C语言阶段2
    JAVA_SE基础——34.static修饰成员变量
    JAVA_SE基础——33.this关键字的练习
    JAVA_SE基础——32.this关键字调用本类的构造方法
    JAVA_SE基础——31.this关键字
    JAVA类的方法调用和变量(全套)
    JAVA_SE基础——30.构造代码块
  • 原文地址:https://www.cnblogs.com/webor2006/p/8046615.html
Copyright © 2011-2022 走看看