Android Kotlin 设计模式之原型模式

2020-01-20  本文已影响0人  水天滑稽天照八野滑稽石

前言

继续填坑,这次是原型模式

什么是原型模式

首先在java里面是存在深拷贝和浅拷贝的

而我们常用的 = 本质上就是浅拷贝

    @Test
    fun test(){
        val stu1 = Student("xiao",12)
        println("stu1  name:${stu1.name}  age:${stu1.age}")
        val stu2 = stu1
        stu2.name = "da"
        stu2.age = 15
        println("stu1  name:${stu1.name}  age:${stu1.age}")
    }

    class Student(var name: String,
                  var age: Int)


除了基本数据类型

    @Test
    fun test(){
        val a = 12
        println("a:$a")
        var b = a
        b = 13
        println("a:$a")
    }

这个是和java的常量池有关,这个下次再说
所以原型模式就是一个深拷贝来着
如我们Android里面的intent
    @Test
    fun test00() {
        val intent1 = Intent()
        intent1.putExtra("xiao","xiao")
        val intent2 = intent1.clone() as Intent
        intent2.putExtra("da","da")
        println("intent1 da:${intent1.getStringExtra("da")}")
    }

正文

写原型模式的话在kotlin里面有以下2种写法

 @Test
    fun test(){
        val stu1 = Student("xiao",12)
        println("stu1  name:${stu1.name}  age:${stu1.age}")
        val stu2 = stu1.clone()
        stu2.name = "da"
        stu2.age = 15
        println("stu1  name:${stu1.name}  age:${stu1.age}")
    }

    class Student(var name: String,
                  var age: Int) : Cloneable{

        public override fun clone(): Student {
            return super.clone() as Student
        }
    }
 @Test
    fun test(){
        val stu1 = Student("xiao",12)
        println("stu1  name:${stu1.name}  age:${stu1.age}")
        val stu2 = stu1.copy()
        stu2.name = "da"
        stu2.age = 15
        println("stu1  name:${stu1.name}  age:${stu1.age}")
    }

    data class Student(var name: String,
                  var age: Int)
上一篇 下一篇

猜你喜欢

热点阅读