23种内功之--原型模式

作者: MinuitZ | 来源:发表于2017-10-31 17:14 被阅读19次

    原型模式指的是, 用户可以在某个对象中克隆出与对象属性一致的实例. 这个过程叫克隆 , 被复制的实例就是"原型".
    原型模式多用于创建过程复杂或者构造耗时的实例 , 在该情况下直接使用原型模式 , 不仅能是代码更清晰 , 也能使程序运行更高效.

    使用场景

    1. 初始化消耗资源很多
    2. 新产生对象流程复杂
    3. 一个对象需要供给其他对象访问,而且各个对象都需要修改其值时,可以拷贝多个对象供调用者访问,即保护性拷贝

    实现
    使用User类来做个实例, 类对象有两个基本类型 , 一个引用类型

    public class User implements Cloneable{
    
        //基本类型
        private String name;
        private String age;
        //引用类型
        private ArrayList<Integer> scores;
    
        @Override
        protected User clone() throws CloneNotSupportedException {
            User user= (User) super.clone();
            user.age=this.age;
            user.name=this.name;
    //        user.scores= (ArrayList<Integer>) this.scores.clone();
            user.scores=this.scores;
            return user;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public ArrayList<Integer> getScores() {
            return scores;
        }
    
        public void setScores(ArrayList<Integer> scores) {
            this.scores = scores;
        }
    }
    

    过程

    1. 让类对象实现Cloneable接口 , 这个接口并没有任何方法 , 只是一个标记;同时 重写clone方法 , 这个方法是Object中的方法. 如果没有实现接口就重写clone方法 , 会抛出异常
    2. 该实例中有代码注释的地方 , 这里涉及到深拷贝和浅拷贝的东西了. 浅拷贝指的是 , 两个变量指向了同一块内存 , 一个改变 , 另一个也会跟着改变 ; 而深拷贝就相当于重新生成了一个新的变量 , 这个变量除了值和原型相同 , 其余并没有任何关系.
      如果是类对象有引用变量, 在使用原型模式时 , 在clone函数中 , 必须对该对象调用xxx.clone方法 , 才能完成深拷贝 , 否则只能完成浅拷贝.

    调用

    相关文章

      网友评论

        本文标题:23种内功之--原型模式

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