zoukankan      html  css  js  c++  java
  • [一天一个设计模式]-[原型模式]

    原型模式即通过一个已有的对象clone出一个一样的对象,当直接创建该对象非常消耗资源时则可以考虑原型模式。实现克隆操作,继承 Cloneable,重写object的 clone()。

    克隆分深度克隆和浅度克隆
      浅度克隆:只把需要克隆对象的成员变量的值复制过去,如果是引用变量也只会复制引
      用地址,指向的和原对象是同一个对象。
      
      深度克隆:把需要克隆对象的引用成员变量也克隆一份。
    
    浅度克隆
    public class SimpleClone implements Cloneable {  
    
        public int s = null;    
        
        public SimpleClone() {  
        }  
      
        public Object clone() {  
            SimpleClone newSimpleClone =  null;  
            try {  
                /* 浅克隆 */  
                newSimpleClone = (SimpleClone)super.clone();  
            } catch (CloneNotSupportedException e) {  
                e.printStackTrace();  
            }  
            return newSimpleClone;  
        }  
    }  
    
    深度克隆
    重写clone方法,在clone方法中把需要克隆的成员变量也clone一份让后赋值
    (此方法只支持,成员变量也为cloneable)
    
    
    public class SimpleClone implements Cloneable {  
    
        public Object s = null;    
        
        public SimpleClone() {  
        }  
      
        public Object clone() {  
            SimpleClone newSimpleClone =  null;  
            try {  
                /* 浅克隆 */  
                newSimpleClone = (SimpleClone)super.clone();  
                newSimpleClone.s=s.clone()
            } catch (CloneNotSupportedException e) {  
                e.printStackTrace();  
            }  
            return newSimpleClone;  
        }  
    }  
    
    
    通过序列化方式(此方式需要成员变量均实现Serializable接口)
    
    
    public class SimpleClone implements Cloneable,Serializable {  
    
        public Object s = null;    
        
        public SimpleClone() {  
        }  
      
        public Object clone() {  
            SimpleClone newSimpleClone =  null;  
            try{ 
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ObjectOutputStream oos = new ObjectOutputStream(baos);
                oos.writeObject(this);
                oos.close();
                ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
                ObjectInputStream ois = new ObjectInputStream(bais);
                newSimpleClone = ois.readObject();
                ois.close(); 
            } catch (IOException e){
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return newSimpleClone;  
        }  
    }  
    
    
  • 相关阅读:
    Python多态
    python 元类与定制元类
    Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
    Python 类 --基础与要点
    服务器错误401
    H5中使用Web Storage来存储结构化数据
    Web Storage
    定义表单控件的id和name注意点
    Annotation(注解)代替配置文件
    jQuery 特殊选择器this
  • 原文地址:https://www.cnblogs.com/A-yes/p/12026940.html
Copyright © 2011-2022 走看看