プロトタイプデザインパターン

私たちは、デザインパターンをプロトタイプに進む前に、私たちはJavaで、クローン()メソッドで確認する必要があります。

オブジェクトのクローン作成は、オブジェクトの正確なコピーを作成する方法です。オブジェクト・クラスのクローン()メソッドは、オブジェクトをクローン化するために使用されます。

java.lang.Cloneableインターフェースは、そのオブジェクトのクローン私たちが作成するクラスによって実装されなければなりません。私たちがCloneableインタフェースを実装していない場合は、cloneメソッド

CloneNotSupportedExceptionが生成されます。

クローン()メソッドは、オブジェクトクラスで定義されています。

 

クローン()メソッドの利点。

clone()メソッドは、オブジェクトの正確なコピーを作成するための余分な処理タスクを保存します。私たちは、新しいキーワードを使用して実行する場合、それは多くのかかります

処理時間は、我々は、オブジェクトのクローニングを使用する理由であることに行うことができます。

クローン()は、配列をコピーする最速の方法です。

クローンのデメリット()

オブジェクトのクローン作成のデメリット

クローンのいくつかの欠点()メソッドは、次のとおりです。

  • Object.clone()メソッドを使用するために、我々は、Cloneableインタフェースを実装するクローン()メソッドを定義し、CloneNotSupportedExceptionを扱うように、私たちのコードに構文の多くを変更する必要があり、そして最後に、)(Object.cloneを呼び出しなど
  • 私たちは、それはそれで任意のメソッドを持っていませんがCloneableインタフェースを実装する必要があります。私達はちょうど私達が私達のオブジェクトに()クローンを実行することができますJVMを伝えるためにそれを使用する必要があります。
  • Object.clone()が保護されたので、私たちは(私たち自身のクローンを提供)と、間接的にそれからObject.clone()を呼び出す必要があります。
  • 我々は、オブジェクトの構築を制御することはできませんので、Object.clone()は、任意のコンストラクタを呼び出すことはありません。
  • あなたは子クラスでcloneメソッドを書きたい場合は、そのスーパークラスのすべては、それらの中にクローン()メソッドを定義するか、または別の親クラスからそれを継承する必要があります。それ以外の場合は、super.clone()チェーンは失敗します。
  • Object.cloneは()だけ浅いコピーをサポートしていますが、私たちは深いクローン作成が必要な場合、我々はそれをオーバーライドする必要があります。
クラス Student18は実装Cloneableを{  
 2 のint rollnoと、  
3 .String名。  
4 5.Student18(int型rollno、文字列名){  
 6  .rollno = rollno。  
7. この .nameの= 名前;  
8 }  
 9 10. パブリックオブジェクトクローン()スローCloneNotSupportedException {  
 11 リターン スーパー.cloneを();  
12 }  
 13 14. 公共の 静的な 無効メイン(文字列引数[]){  
 15 試み{  
 16.Student18 S1 = 新しい Student18(101、 "アミット" )。  
17 18.Student18 S2 = (Student18)s1.clone();  
19 20.System.out.println(s1.rollno +」「+ s1.name)。  
21.System.out.println(s2.rollno +」「+ s2.name)。  
22 23.} キャッチ(CloneNotSupportedException c)は{}  
 24 25 }  
 26}  

 

プロトタイプデザインパターン。

Prototypeパターンは心の中でパフォーマンスを維持しながら、重複オブジェクトの作成を参照します。

デザインパターンのこのタイプは、生成に関するパターンの下に来ます。

オブジェクトの作成は、直接コストがかかる場合は、このパターンが使用されています。例えば、オブジェクトは、高価なデータベース操作後に作成されるべきです。私たちは、次のリクエストに応じてそのクローンを返し、オブジェクトをキャッシュして、データベースを更新し、必要なときので、データベース呼び出しを削減することができます。

下の図の流れとコードとのプロトタイプデザインパターンのデモの例です。

 

 ステップ1は、クローニング可能なインタフェースを実装する抽象クラスを作成します。

パブリック 抽象 クラスの形状は、実装のCloneable { 
   
   プライベート文字列ID;
   保護された文字列型。
   
   抽象 ボイドドロー(); 
   
   パブリック文字列のgetType(){
       戻り値のタイプ; 
   } 
   
   パブリック文字列のgetId(){
       戻りID。
   } 
   
   公共 ボイドSETID(文字列ID){
       この .ID = ID。
   } 
   
   パブリックオブジェクトクローン(){ 
      オブジェクトクローン = NULL ; 
      
      試す{ 
         クローン =スーパー.clone(); 
         
      } キャッチ(CloneNotSupportedException電子){ 
         e.printStackTrace(); 
      } 
      
      戻りクローン; 
   } 
}

 

上記のクラスを拡張した具体クラスを作成します。

1. Rectangle.java

パブリック クラス長方形は延び形{ 

   パブリック矩形(){ 
     タイプ =「矩形を」
   } 

   @Override 
   公共 ボイドドロー(){ 
      System.out.printlnは( "内部長方形:: draw()メソッド。" ); 
   } 
}

2. Square.java

パブリック クラススクエア延び形{ 

   公共広場(){ 
     タイプ =「スクエア」
   } 

   @Override 
   公共 ボイドドロー(){ 
      System.out.printlnは( "インサイド・スクエア:: draw()メソッド。" ); 
   } 
}

3. Circle.java

パブリック クラスサークル延び形{ 

   パブリックサークル(){ 
     タイプ =「サークル」
   } 

   @Override 
   公共 ボイドドロー(){ 
      System.out.printlnは( "内部サークル:: draw()メソッド。" ); 
   } 
}


ステップ3.データベースから具象クラスを取得し、ハッシュテーブルに格納するクラスを作成します。

インポートするjava.util.Hashtable; 

パブリック クラスShapeCache { 
    
   プライベート 静的 HashtableのshapeMap = <文字列、図形> 新しいハッシュテーブル<文字列、図形> (); 

   パブリック 静的形状getShape(文字列shapeId){ 
      形cachedShape = shapeMap.get(shapeId)。
      リターン(形状)cachedShape.clone(); 
   } 

   // 各形状実行データベースクエリおよび形状作成
    // shapeMap.put(shapeKey、形状)。
   // 例えば、我々は3つの形追加されている
   
   公共の 静的な 無効 = {)(loadCacheを
      サークルサークルの新しいサークル(); 
      circle.setId( "1" )。
      shapeMap.put(circle.getId()、円)。

      スクエア広場 = スクエア(); 
      square.setId( "2" ); 
      shapeMap.put(square.getId()、四角)。

      矩形矩形 = 新しい矩形()。
      rectangle.setId( "3" )。
      shapeMap.put(rectangle.getId()、矩形); 
   } 
}


ステップ4 PrototypePatternDemoはHashtableに格納されている形状のクローンを得るためにShapeCacheクラスを使用しています。

PrototypePatternDemo.java

パブリック クラスPrototypePatternDemo {
    公共 静的 ボイドメイン(文字列[]引数){ 
      ShapeCache.loadCache()。

      clonedShape形状 =(形状)ShapeCache.getShape( "1" )。
      System.out.println( "形状:" + clonedShape.getType());        

      clonedShape2形状 =(形状)ShapeCache.getShape( "2" )。
      System.out.println( "形状:" + clonedShape2.getType());        

      clonedShape3形状 =(形状)ShapeCache.getShape( "3" )。
      System.out.println( "形状:" + clonedShape3.getType());        
}

 

おすすめ

転載: www.cnblogs.com/codingyangmao/p/11263293.html