設計模式 -原型模式

設計模式 -原型模式 (Prototype)

一、基本介紹

  • 原型模式:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象
  • 原型模式是一個創建型設計模式,允許一個對象再創建另外一個可定製的對象,不需要知道創建的細節
  • 工作原理:通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象通過請求原型對象拷貝它們自己來進行創建,對象.clone()

二、注意事項

  1. 淺拷貝

    淺拷貝 只對 基本數據類型其真正的拷貝作用,對於引用類型來說的話,只是簡單的對引用類型地址進行了拷貝,即使進行了多次的淺拷貝,多個對象中地引用類型還是指的同一個

  2. 深拷貝

    深拷貝用來解決淺拷貝問題

    深拷貝實現方式:

    • 方式一:重寫 clone 方法進行實現深拷貝

       super.clone()
      
    • 方式二:通過對象序列化進行深拷貝推薦使用

      public Object deepClone() {
              ByteArrayOutputStream byteArrayOutputStream = null;
              ObjectOutputStream objectOutputStream = null;
              ByteArrayInputStream byteArrayInputStream = null;
              ObjectInputStream objectInputStream = null;
      
              try {
                  byteArrayOutputStream = new ByteArrayOutputStream();
                  objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
      
                  objectOutputStream.writeObject(this);
      
      
                  byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
                  objectInputStream = new ObjectInputStream(byteArrayInputStream);
      
                  SpringDemo springDemo = (SpringDemo) objectInputStream.readObject();
                  return springDemo;
              } catch (IOException e) {
                  e.printStackTrace();
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              }finally {
                  try {
                      byteArrayInputStream.close();
                      byteArrayInputStream.close();
                      objectOutputStream.close();
                      byteArrayInputStream.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
              return null;
          }
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章