• 原型模式


    通过拷贝原型对来象创建一个新对象的方式就叫原型模式,理解起来没有什么难度,唯一有点疑问的就是为啥要用原型模式呢?当一个对象十分复杂的时候,创建这个对象可能就会很复杂,恰巧这个对象的大部分属性在这个情景里都是相同的,只有少部分属性有修改,这样我们就可以试用原型模式,来简单方便的获得一个新对象,如果底层支持有优化的话,还能提高性能,比如说Java

    public class Person implements Cloneable {
        int age;
        String name;
        
        public Person clone() throws CloneNotSupportedException {
            return (Person)super.clone();
        }
    }
    
    // Object类的clone方法是native的,由c语言实现
    protected native Object clone() throws CloneNotSupportedException;
    

    一个类实现了Cloneable接口,就可以调用super.clone()方法,来实现对象的浅拷贝。

    浅拷贝 深拷贝

    顾名思义就是烤扇贝的时候扇贝的位置,???,为什么会有深浅两种拷贝,本质上是因为对象是一种引用,如果只拷贝一层的话,这个对象里的引用对象类型的指向还是没有改变的,包装类型不算,来看图

    相对的深拷贝就是

    浅拷贝因为引用了同一个对象,所以一个改变了,其余的都跟着改变,深拷贝是两份各不相干的数据,那怎么实现深拷贝呢?

    public class Person implements Cloneable {
        String name;
        Phone phone;
    
        public Person clone() throws CloneNotSupportedException {
            Person p =  (Person)super.clone();
            p.phone = phone.clone();
            return p;
        }
    }
    

    这样变通一下可以实现,但是引用对象一多,还是会很复杂,更方便得方法是使用序列化,这里就不多说了,超纲了。

    总结

    原型模式是属于创建型模式,理解起来也挺简单,在java中的具体实现就是clone方法。

  • 相关阅读:
    SDWebImage
    ios面试题
    IOS推送功能push
    NSString什么时候用copy,什么时候用strong
    OC点语法和变量作用域
    iOS 常用几种数据存储方式
    JSON与XML的区别比较
    IOS开发——网络编程OC篇&Socket编程
    IOS-UI控件大全
    使用sql语句备份一张表
  • 原文地址:https://www.cnblogs.com/ljsh/p/12721874.html
Copyright © 2020-2023  润新知