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;  
        }  
    }  
    
    
  • 相关阅读:
    使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)
    js和jquery页面初始化加载函数的方法及先后顺序
    熔断器原理
    List<T>线性查找和二分查找BinarySearch效率分析
    ASP.NET资源大全-知识分享 【转载】
    C#语法——委托,架构的血液
    SUPERSOCKET 客户端
    VS 中的几种注释方法
    计算机专业术语中英文对照
    2018服务端架构师技术图谱
  • 原文地址:https://www.cnblogs.com/A-yes/p/12026940.html
Copyright © 2011-2022 走看看