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();
    }

  • 相关阅读:
    蓝屏代码stop:0X000000EA(0X85E286B8,0X8635F210,0XF7A53CBC,0X00000001)
    SAP HR 复制PA30的人员
    ABAP OO 开发语法整理
    ABAP制作密码输入框
    Basis 基础
    Excel 文件下载
    SAP 锁机制
    SE16传输配置表数据
    FastAdmin bootstrap-table 分页手动输入跳转
    FastAdmin 的 url 有一个 ref=addtabs 是怎么添加的?
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15224083.html
Copyright © 2011-2022 走看看