、作成されたオブジェクトの数を減らすメモリフットプリントを削減、資源を節約し、パフォーマンスを向上させるために、メインソリューションをフライ級。
既存のオブジェクトを使用する場合は、既存のオブジェクトのマッチングからフライ級モデルは、新しいオブジェクトを作成するだけでなく、
これは、オブジェクトの再利用は、不必要な作成を減らすことができます。
基本的な考え方:既存のオブジェクトを使用する場合は、その後の使用中のHashMapでのHashMapオブジェクト保存された外観を使用し、
あなたは、オブジェクトを作成しない場合、それをHashMapの配置します。
今、円、円いくつかのパラメータ、中心位置、半径、色を描画するために必要とします。
あなたがサークルを毎回描く場合は、中心と半径は、毎回異なる場合があります。
しかし、異なる位置は、円の異なる色が同じ半径であってもよいです。
この時点で、私たちは色で円を区別することができるようになります。
図3は、例えば、円の半径、円10の半径は、それは、赤い円であります
私達はちょうど半径を設定するために赤い円オブジェクトを作成する必要があり、位置がすることができ、2つのオブジェクトを作成する必要はありません。
形状
パブリック インターフェイス形状{ ボイドドロー(); }
円は、形状インターフェース、主性、X、Y中心座標、半径、半径、カラー色を実現します。
初期化オブジェクトのコンストラクタは、色の提供します
パブリック クラスサークルは実装形{ プライベート文字列の色を、 プライベート int型のx; プライベート int型のy; プライベート int型の半径; パブリック文字列GETCOLOR(){ 戻り色。 } パブリックサークル(文字色){ スーパー()。 この .color = 色。 } 公共 INT のgetX(){ 戻りX。 } 公共 ボイド SETX(int型X){ この .X =のX。 } 公共 INT のgetY(){ 戻りY。 } 公共 ボイド SETYの(int型のY){ この .Y = Y。 } 公共 INT getRadius(){ 戻り半径。 } 公共 ボイド setRadius(INTの半径){ この .radius = 半径。 } @Override 公共 ボイドドロー(){ // TODO自動生成方法スタブ System.out.println( "サークル:ドロー()色:" + 色 + "X "+ X +"、Y:" + Y + "半径" +半径+ "]" )。 } }
ShapeFactory
インポート; java.util.HashMapを インポートjava.util.Mapを、 パブリック クラスShapeFactory { プライベート 静的地図<文字列、図形> HMAP = 新しい新規のHashMap <文字列、図形> (); 公共の 静的サークルgetCircle(文字色){ サークルサークル = (円)hMap.get(色); //最初のカラーサークル既存により取得された IF(円== NULL ){ //次にHMAPのでそれを作成し、配置しない場合は 、円 = 新しい新円(色) ; hMap.put(カラーサークル)出力//各情報ビルドオブジェクトを作成 するSystem.out.printlnを(+色+ "----": "----円を作成します" )。 } 戻りサークル; } }
メイン
パブリック クラスメイン{ プライベート 静的文字列[]色= { "赤"、 "緑"、 "BULE" }; 公共 静的 ボイドメイン(文字列[]引数){ ため(int型 I = 0;私は10 <; I ++は){ // 、工場から円をゲット // 直接アクセスし、リターンがある場合は 、// そのオブジェクトを作成し、HashMapの中でそれを配置し、オブジェクトを作成するために返していない場合は サークルサークル= ShapeFactory.getCircle(getRandomColor()); circle.setX(getRandom()); // ランダム指定中心位置 circle.setY(getRandom()); circle.setRadius(getRandom()); //ランダムに割り当てられた半径 circle.drawは(); } } // ランダム色生成 パブリック 静的文字列getRandomColor(){ 戻り色[(は(INT)(Math.random()* 10))%の; colors.lengthでは、] } // 発生をランダム パブリック 静的 INT getRandom(){ リターン(INT)(Math.random()* 100 ); } }
运行结果:
----赤:----円作成 [:X、レッドカラー:サークル描画() 57、yは38、半径:59 ] サークル:ドロー()色:赤、X: 0 、Y:77、半径:25 ] ----円作成:緑色---- サークル:描画()色:緑、×: 29、Y 77、半径:52 ] サークル:描画()[カラー:赤、X: 0、Y:88、半径:49 ] サークル:描画()色:緑、X: 7、Y:11、半径:52 ] サークル:描画()色:赤、X: 20 、Y:7、半径:51 ] サークル:描画()色:緑、×: 8、Y:18、半径:94 ] ----サークルを作成:BULE ---- サークル:ドロー()[カラー:BULE、X:93、Y 25、半径:64 ] サークル:描画()色:赤、X: 76、Y 75、半径:47 ] サークル:描画()色:赤、X: 29、Y 85、半径:96]
演算結果を見ることができる観察し、そこに10ラウンドの抽選がありますが、唯一の3つのオブジェクトを作成しました。
これは非常にオブジェクトの数を減らすことができます。
参考文献:
https://www.runoob.com/design-pattern/flyweight-pattern.html