zoukankan      html  css  js  c++  java
  • 设计模式之 原型模式

    原型模式以当前对象为原型(蓝本)来创建另一个新的对象,而无需知道创建的细节。

    · 浅复制: 对象的基本数据类型的变量值会被重新复制和创建,而引用数据类型仍指向原对象的引用。也就是说,浅复制不复制对象的引用类型数据。

    · 深复制:不论是基本数据类型还是引用数据类型,都会被重新复制和创建

    (1)浅复制

    public class Computer implements Cloneable{
        private String cpu;
        private String memory;
        private String disk;
        
        public Computer (String cpu, String memory, String disk){
            this.cpu = cpu;
            this.memory = memory;
            this.disk = disk;
        }
        
        public Object clone(){// 浅复制
            try{
                return (Computer)super.clone();
            }catch(Exception e){
                e.printStackTrace();
                return null;
            }
        }
    }

    (2)深复制

    public class Disk implements Cloneable{
        private String ssd;
        private String hhd;
        public Disk(String ssd,String hhd){
            this.ssd = ssd;
            this.hhd = hhd;
        }
        
        public Object clone(){
            try{
                return (Disk)super.clone();
            }catch(Exception e){
                e.printStackTrace();
                return null;
            }
        }
        
    }
    
    public class ComputerDetail implements Cloneable{
        private String cpu;
        private String memory;
        private Disk disk;
        
        public ComputerDetail (String cpu, String memory, Disk disk){
            this.cpu = cpu;
            this.memory = memory;
            this.disk = disk;
        }
        
        public Object clone(){// 深复制
            try{
                ComputerDetail computerDetail = (ComputerDetail)super.clone();
                computerDetail.disk = (Disk)this.disk.clone();
                return computerDetail;
            }catch(Exception e){
                e.printStackTrace();
                return null;
            }
        }
    }

    (3)使用原型模型

    public static void main(String[] args){
        // 浅复制的
        Computer computer = new Computer("8core","16G","1TB");
        Computer computerClone = computer.clone();
        
        //深复制的
        Disk disk = new Disk("208G","2TB");
        ComputerDetail computerDetail = new ComputerDetail("8core","16G",disk);
        ComputerDetail computerDetailClone = computerDetail.clone();
    }

  • 相关阅读:
    定位中方向余弦矩阵(DCM)简介
    前端UI框架小汇总
    前端知识点小结
    overflow兼容iOS
    使用Flexible实现手淘H5页面的终端适配
    获取当前Javascript脚本文件的路径
    Javascript中document.execCommand()的用法 ( 实现浏览器菜单的很多功能 )
    jquery中的map()方法与js中的map()方法
    js判断是否为移动端
    页面制作注意事项
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15224083.html
Copyright © 2011-2022 走看看