美文网首页
Android Kotlin 设计模式之原型模式

Android Kotlin 设计模式之原型模式

作者: 水天滑稽天照八野滑稽石 | 来源:发表于2020-01-20 17:39 被阅读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种写法

  • 实现cloneable接口并重写clone方法
 @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
        }
    }
  • 使用data关键字
 @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)

相关文章

网友评论

      本文标题:Android Kotlin 设计模式之原型模式

      本文链接:https://www.haomeiwen.com/subject/hhgjzctx.html