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;  
        }  
    }  
    
    
  • 相关阅读:
    User Contro用法
    IHttpHandler 在SharePoint中的应用
    常用Stsadm 操作,网站备份与还原
    Schedule
    WP7>界面>ListBox数据绑定、图文混编、动态添加行
    WP7>界面>全景视图
    WP7>网络>读取网页源码
    UNIXLINUX编程实践教程>第二章>实例代码注解>who01
    WP7>界面>页面导航、切换及参数传递
    UNIXLINUX编程实践教程>第二章>实例代码注解>more01
  • 原文地址:https://www.cnblogs.com/A-yes/p/12026940.html
Copyright © 2011-2022 走看看