GOF23のデザインパターンのプロトタイプモデル01

プロトタイプモデルのプロトタイプ

プロトタイプモード:

- データ・オブジェクトを生成することは面倒な準備が必要か必要で新しい目標時間が長すぎると、それを製造することができるような新たなアクセスによって、プロトタイプモデルが同一のコピーをクローニングすることによって、使用することができます

- Javaでクローン技術は、オブジェクトはプロトタイプであり、新しいオブジェクトを複製、オブジェクトが明らかにプロトタイプオブジェクトに新しいスクリプトの特徴

- 似ていますが、新たに同一ではないのクローン作成、新しいオブジェクトは、デフォルト値、同じプロパティの値とクローン化されたオブジェクトのプロトタイプオブジェクトです。シャローコピーは、それが参照されている場合、オブジェクトの種類の属性をコピーすると、同じアドレスを指す;深いコピーは、プロトタイプオブジェクトの属性をコピーして、参照が変更されたプロトタイプを確保したり、同じアドレスを指してはならないオブジェクト属性ときときに、プロパティ値のコピー、他のオブジェクトに影響を与えることなく、

- 利点:高効率(直接クローニング、再構築処理実行ステップを回避するため)

プロトタイプモデルは、以下のステップを実装しました:

- Clongableインターフェース(エアインターフェース)とクローン方法を書き換えます

- ディープコピープロパティクローンメソッドオブジェクト参照を呼び出す必要があります

/ **プロトタイプモード(浅いクローン)
 (同じメモリを指す)属性が複製されない*オブジェクト参照
 *コード入る@author帆
 *
 * /
publicクラスヒツジを実装Cloneableを{
  プライベート文字列名;
  プライベート日の誕生日を、
  
  @Override
  保護オブジェクト・クローン()CloneNotSupportedException {スロー
  ; super.clone()への復帰
  }
  パブリック文字列のgetName(){
   戻り名;
  }
  公共ボイドのsetName(文字列名){
   this.name =名;
  }
  パブリックgetBirthday日(){
   誕生日を返します。
  }
  公共ボイドsetBirthday(日の誕生日){
   this.birthday =誕生日;
  }
  公共ヒツジ(文字列名、日付誕生日){
   this.name =名前;
   this.birthday =誕生日。
  }
  パブリックヒツジ(){
  }
}

/ **
 *深复制(深いクローン)
 * @author小帆敲代码
 *
 * /
publicクラスSheepDeepがCloneableを実装して、{
 プライベート文字列名;
 プライベート日の誕生日。
 
 @Override
 保護オブジェクトのクローン()CloneNotSupportedException {スロー
  )(オブジェクトOBJ = super.cloneと、
  SheepDeep SD =(SheepDeep)OBJ。
  日付d =(日)sd.getBirthday()クローン(); //属性也克隆一份
  sd.setBirthday(D);
 SDを返します。
 }
 パブリック文字列のgetName(){
  戻り名。
 }
 公共ボイドのsetName(文字列名){
  this.name =名。
 }
 公共日getBirthday(){
  誕生日を返します。
 }
 公共ボイドsetBirthday(日誕生日){
  this.birthday =誕生日。
 }
 公共SheepDeep(文字列名、日付誕生日){
  this.name =名。
  this.birthday =誕生日。
 }
 パブリックSheepDeep(){
}
}

 

クライアント

クライアントクラス{パブリック
  パブリック静的な無効メイン(文字列[]引数)は例外{スロー
   ;日日新新D =(132328888L)
   羊羊新しい新しいS1 =( "ドリー"、D)
   のSystem.out.println(S1);
   システム。 out.printlnを(s1.getBirthday());
   
   ヒツジS2 =(シープ)s1.clone();
   のSystem.out.println(S2)
   のSystem.out.println(s2.getBirthday());
   //浅いコピーのテストしかし、コピーが参照されたオブジェクトのアドレスの値ではありません

//注意顺序
   羊S3 =(シープ)s1.clone();
   d.setTime(47388989L)。
   System.out.println(S3)。
   System.out.println(s3.getBirthday())。
  }
}

 

おすすめ

転載: www.cnblogs.com/code-fun/p/11329744.html