对象创建型模式~原型模式

preknowledge:

1 值类型 & 引用类型 ~ 内存四区

  值类型:int float double

  引用类型:string 实例对象

  内存四区:OP将内存划分为四个区域:代码段,全局变量区,栈,堆 ~ 不同的内存管理

      全局变量区:static的方法放在全局变量区,该方法是属于类的方法

      栈:存放的变量具有生命周期,其中保存的数值由操作系统管理,只可压进栈基本的有确定长度单位的~值类型

      堆:存放长度单位不确定的~引用类型

2 浅克隆 & 深克隆

  浅克隆:只复制了栈区所指向堆区的地址,堆区的数据没有复制,所以复制出的与原对象指向同一个饮用类型的变量

      只考虑所复制的对象,而不考虑其所引用的成员对象

      java中Object类提供的clone()方法

      

 深克隆:复制代码,引用类型,值类型

      引用其他对象的变量将指向被复制过的新对象

      

3 Java中的Stream

  java利用Stream简化了输入输出的过程:

  OutputStream:输出到外部(磁盘,内存缓存区...)

  InputStream:输入到程序的内部(可以从文件,网络接口,内存缓存区...中输入)

  过程:

    定义输入流(定义来源,属于结点流)~定义处理流1(对输入数据进行的操作1)~处理流2 ...~ 定义输出流(定位输出的位置,属于结点流)

    注意:需要由结点流开始,结点流结束

  java中的序列化:方便对象在计算机间的传递 ~ java中该过程需要用到Stream

          ~  A计算机对二进制代码进行复制,B计算机再对该二进制代码进行还原

            ~ 类支持该功能使用:serializable标识接口(该接口为空,作用为使jdk提前知道并作准备)

          ~ 深克隆中:实例化后的实例需要被序列化

具体例:

 1 import java.io.*;
 2 
 3 public class Email implements Serializable
 4 {
 5     private Attachment attachment = null;
 6     public Email () 
 7     {
 8         this.attachment = new Attachment();
 9     }
10 
11     public Object deepClone () throws IOException,ClassNotFoundException,OptionalDataExecption
12   {
13     //将对象写入流中
14     ByteArrayOutputStream bao = new ByteArrayOutputStream();//字节数组输出流标明数据的来源地(文本流:文本形式;字节流:直接操作二进制)
15     ObjectOutputStream oos = new ObjectOutputStream(bao);//处理流:序列化为一个Object,转化为Object,bao:输出位置结点流处理完给其保存
16     oos.writeObject(this);              //this:从缓存区中还原出一个新的对象,Email自身实例把当前实例对象序列完再写入到结点bao中
17 
18     //将对象从流中取出
19     ByteArrayInputStream bis = new ByteArrayInputStream(bao.toByteArray());//缓存区按字节数组形式读取出
20     ObjectInputStream bis = new ObjectInputStream(bis);            //处理流
21     return(bis.readObject());                            //反序列化,返回对象
22   }
23 
24 public Attachment getAttachment()
25   {
26     return this.attachment;
27   }
28 
29 public void display(){
30     System.out.println(“read the Email”);
31   }
32 }

 

模式动机:

  复制对象自身,从而克隆出多个与原型对象一样的对象

模式定义:

  用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象

模式角色:

  抽象原型类:定义具有自己的方法的接口

  具体原型类:实现具体克隆的方法,在克隆方法中返回自己的一个克隆对象

  客户类:让一个原型克隆自身从而创建一个新的对象

 模型优点:

  提高新实例效率

  可以动态增加减少产品类

  提供简化的创建结构

  可以使用深克隆保存对象的状态(ps)

模型缺点:

  对已有的类进行改造时违背了开闭原则

  实现深克隆较复杂(内存的分配,内存的释放)

模式适用:

  创建新对象成本较大

  对象的状态变化小

 

 

 

  

posted on 2022-10-20 23:01  罗小罗佳油  阅读(14)  评论(0编辑  收藏  举报