10_原型模式

一、实现可克隆的类

package com.study.prototype

import java.util.*

/**
 * 实现Cloneable接口,kotlin实现时不用导包。我在创建这个类的时候,点击Cloneable是跳不到对应类的。
 * 
 */
class Phone(var color:String,var version:String,var date: Date): Cloneable {



    @Throws(CloneNotSupportedException::class)
    public override fun clone(): Any {
        return super.clone()
        //深拷贝需要替换成如下代码:
//        val phone = super.clone() as Phone
//        phone.date=phone.date.clone() as Date
//        return phone
    }

    override fun toString(): String {
        return "Phone(color='$color', version='$version',date='$date')${super.toString()}"
    }
}
1.1 浅拷贝
1.2 深拷贝

二、主程序调用

package com.study.prototype

import java.util.*

/**
 * 定义:
指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
不需要知道任何创建的细节,不调用构造函数


类型:创建型

适用场景:
类初始化消耗较多资源
new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
构造函数比较复杂
循环体生产大量对象时

优点:
原型模式性能比直接new一个对象性能高
简化创建过程

缺点:
必须配备克隆方法
对克隆复杂对象或克隆出的对象进行复杂改造时,容易引入风险
深拷贝、浅拷贝要运用得当

深克隆
对于引用类型如果需要他们指向不同的对象。
对于某一个对象的引用类型的时候,需要显式的去写对于哪个属性进行深克隆

 */
fun main() {
    var phone=Phone("red","1.0", Date());
    println("$phone")
    val phoneClone = phone.clone()
    println("$phoneClone")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值