<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      設計模式之原型模式

      一.定義

      原型模式:原型模式用于創建重復的對象,實現對象的拷貝。這種模式類似于創建型模式,提供了創建對象的最佳模式。

      這種模式存在的應用場景在于,能夠復制當前對象,實現對象數據的克隆。比如:如果一個對象的數據需要經過較高代價的數據庫操作,采用原型模式能夠較好的緩存當前對象,減少數據庫的訪問量。

      二.使用場景

      思想:用實例對象,指導對象的創建工作.

      應用:1.一個復雜的對象,包含多種數據和結構,層次較深時,適用與原型模式(當需要創建一個與復雜對象部分數據相同的對象)

                2.當復雜對象需要獨立于系統運行,而不破壞本系統中的結構

      實例場景:1.一個樓盤有名稱,地址和施工隊三個成員變量。施工隊有名稱,人數和包工頭。包工頭有名稱和年齡。現在要建設一個隔壁的樓盤,還是由這個施工隊進行建設的,只是地址不同。

      如果重新創建,過程較為復雜,費時費力,采取原型模式可以快速構建一個新的樓盤

                       2.系統中已經有一架飛機,飛機有名稱和型號和廠商。廠商有名稱,地址和負責人。負責人有姓名和年齡。現在要一家相同的飛機由不同的負責人進行指導生產的,如何快速創建這樣的對象。

      三.優缺點

      優點:1.快速創建復雜對象實例 2.逃避構造函數約束

      缺點:1.引用含有循環引用如何處理 2.必須實現Cloneable接口

      下面是一張UML圖用來說明原型模式的關系

       

      下面是一個具體的應用場景:

      如何實現不投的型號的手機由相同的工廠生產的問題,快速創建這樣的一個對象

       

       

       結構:手機由名稱,價格,生產工廠組成。生產工廠由工程師和名稱組成。工程師由姓名這個基本屬性。

      現在為了快速復制同一工廠的不同手機,解決這一實際應用場景。

      Phone類

      public class Phone {
          public String name; //手機名稱
      
          public float price; //價錢
      
          public Factory factory; //工廠
      
          @Override
          public String toString() {
              return "手機名稱:"+this.name+"  價錢:"+this.price+this.factory.toString();
          }
      
          public Phone Clone(){
              Phone phone =null;
              try{
                  phone=new Phone();
                  if(this.name!=null){
                      phone.name=this.name;
                  }
      
                  if(this.price!=0){
                      phone.price=this.price;
                  }
      
                  if(this.factory!=null){
                      phone.factory=this.factory.Clone();
                  }
              }catch (Exception e){
                  new  RuntimeException(e);
              }
      
              return phone;
          }
      }

      Factory類

      public class Factory implements  Cloneable{
      
          public String name;  //工廠名稱
      
          public Person Manager; //負責人
      
          @Override
          public String toString() {
              return "  工廠名稱:"+this.name+"  負責人:"+Manager.toString();
          }
      
          public Factory Clone(){
              Factory factory =null;
      
              try{
                  factory=new Factory();
      
                  if(this.name!=null){
                      factory.name=this.name;
                  }
      
                  if(this.Manager!=null){
                      factory.Manager=this.Manager.Clone();
                  }
      
              }catch (Exception e){
                  new RuntimeException(e);
              }
      
              return factory;
          }
      }

      Person類

      public class Person implements  Cloneable{
      
          public String name; //名稱
      
          @Override
          public String toString() {
              return this.name;
          }
      
          public Person Clone(){
              Person person =null;
      
              try{
                  person =new Person();
      
                  person.name=this.name;
              }catch (Exception e){
                  new RuntimeException(e);
              }
      
              return person;
          }
      }

      然后生產一部榮耀一部分華為

      public class Main {
      
          public static void main(String[] args) {
      
              Phone phone =new Phone();
      
              phone.name="Honor";
      
              phone.price=new Float(1.5);
      
              phone.factory=new Factory();
      
              phone.factory.name="三星工廠";
      
              Person person =new Person();
              person.name="郭臺銘";
              phone.factory.Manager=person;
      
              Phone phone1 =phone.Clone();
      
              phone1.name="華為";
              System.out.println(phone.toString());
              System.out.println(phone1.toString());
          }
      }

      運行結果:

       

       顯然實現了對象的深復制,解決了對象克隆問題。

       

      posted @ 2019-09-09 21:32  coder-zhou  閱讀(3097)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品自产拍在线观看动漫| 日韩av裸体在线播放| av色国产色拍| 国产午夜91福利一区二区| 亚洲av永久无码精品网站| 爆乳2把你榨干哦ova在线观看| 亚洲熟妇色xxxxx欧美老妇| 国产精品九九久久精品女同| 久久久久青草线综合超碰| 又粗又硬又黄a级毛片| 中文字幕午夜福利片午夜福利片97| 日韩av中文字幕有码| 国产无遮挡又黄又爽在线视频| 国产在线精品欧美日韩电影| 国产精品久久国产精麻豆99网站| 久久国产精品免费一区| 国产成熟女人性满足视频| 深夜精品免费在线观看| 华亭县| 自拍偷拍一区二区三区四| 99久久久国产精品消防器材| 国产精品亚洲中文字幕| 中文字幕乱码中文乱码毛片| 欧美一区二区三区性视频| 亚洲国产精品综合久久2007| 98精品全国免费观看视频| 国产精品剧情亚洲二区| 亚洲AV永久无码嘿嘿嘿嘿| 欧乱色国产精品兔费视频 | 深夜av免费在线观看| 337p粉嫩大胆色噜噜噜| 亚洲乱码国产乱码精品精| 一本精品99久久精品77| 伊人精品久久久大香线蕉| 激情人妻自拍中文夜夜嗨| 国产精品福利中文字幕| 精品久久久久久亚洲综合网| 色偷偷亚洲女人天堂观看| 精品少妇av蜜臀av| 久热re这里精品视频在线6| 亚洲国产区男人本色|