この記事では、Javaデザインパターンの楽しみモードについて説明します。次のように、参照のために共有してください。
概念を説明します。つまり、システムに複数の同一のオブジェクトがある場合、1つのコピーを共有するだけで、それぞれにオブジェクトをインスタンス化する必要はありません。たとえば、テキストシステムでは、各文字はオブジェクトとして定義されているため、52の上限と小文字があります。したがって、52のオブジェクトを定義する必要があります。 1mのテキストがある場合、非常に多くの文字があります。各文字がオブジェクトを定義する場合、メモリはずっと前に爆発していたでしょう。次に、各文字がオブジェクトを共有する場合、リソースを大幅に節約します。
フライ級モードでは、さまざまなオブジェクトを生成するため、工場モードがフライ級モードで表示されることがよくあります。フライ級の内部状態は共有に使用されます。 Flyweight Factoryは、オブジェクトのストレージプール(フライ級プール)を維持して、内部状態のオブジェクトを保存する責任があります。フライ級モードは、プログラムの効率とパフォーマンスを改善するモードであり、プログラムの実行速度を大幅に高速化します。次のように、多くのアプリケーションの機会があります。
最初に抽象的なフライ級クラスを定義します。
パッケージフライ級;パブリックアブストラクトクラスフライ級{public abstract void operation();}特定のクラスを実装します。
パッケージフライ級;パブリッククラスconcreteflyweightはflyweightを拡張します{private string string; public concreteflyweight(string str){string = str;} public void operation(){system.out.println( "concrete --- flyweight:" + string);}}}}}ファクトリーメソッドクラスを実装します。
パッケージFlyweight; Import java.util.hashtable; public class flyweightfactory {private hashtable flyweights = new Hashtable();//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- null){//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------このファクトリーメソッドクラスは非常に重要です。詳細な説明があります。
ハッシュテーブルは、各オブジェクトを保存するために1で定義されています。インスタンス化するオブジェクトは2で選択され、6で返されるオブジェクトが選択されます。ハッシュテーブルで選択されるオブジェクトがない場合、可変フライ級はnullであり、新しいフライ級がハッシュテーブルに保存され、オブジェクトが返されます。
最後に、フライ級の呼びかけを見てみましょう。
パッケージフライ級; Import java.util.hashtable; public class flyweightpattern {flyweightFactory = new flyweightfactory(); flyweight fly2; flyweight fly3; flyweight fly5; flyweight fly5; flyweight fly6;/***// ** creates a flyweightn*/* Factory.getFlyWeight( "Google"); fly2 = factory.getFlyWeight( "qutr"); fly3 = factory.getFlyweight( "Google"); fly4 = factory.getFlyWeight( "Google"); Fly5 = factory.getFlyWeight( "Google"); showflyweight(){fly1.operation(); fly2.operation(); fly3.operation(); fly4.operation(); flu6.operation(); int objsize = factory.getFlyWeightSize(); System.out.Println( "objsize =" + objsize = " + objsize); args){system.out.println( "フライ級パターン!"); flyweightpattern fp = new flyweightpattern(); fp.showflywight();}}}実行中の結果は次のとおりです。
コンクリート---フライウェイト:Google
コンクリート---フライ級:Qutr
コンクリート---フライウェイト:Google
コンクリート---フライウェイト:Google
コンクリート---フライウェイト:Google
コンクリート---フライウェイト:Google
objsize = 2
6つのオブジェクトを定義しましたが、そのうち5つは同じです。フライ級モードの定義によれば、「Google」はオブジェクトを共有する必要があります。実際のオブジェクトの数では、2つのオブジェクトしかないことがわかります。
要約:
フライ級モードは、複雑なシステムで多くのメモリスペースを節約するのに役立つため、非常に重要です。 Java言語では、文字列タイプは百科事典モードを使用します。文字列オブジェクトは最終型であり、作成されると変更できません。 Javaでは、一定のプールに文字列定数が存在します。 Javaは、文字列定数が定数プールに1つのコピーしかないことを保証します。文字列a = "abc"。ここで、「abc」は文字列定数です。
Javaに精通している人は、次の例を知っておく必要があります。
string a = "hello"; string b = "hello"; if(a == b)system.out.println( "ok"); elsesystem.out.println( "error");
出力の結果は次のとおりです。条件が2つのaとbのアドレスを比較する場合、またはメモリ空間と言われる場合があることがわかります。
コアサマリー:共有できるオブジェクト、つまり、返される同じタイプのオブジェクトは、実際には同じインスタンスです。クライアントがオブジェクトを生成する必要がある場合、工場はこのオブジェクトのインスタンスが存在するかどうかを検出します。存在する場合は、このオブジェクトインスタンスを直接返します。存在しない場合は、作成して保存してください。これには、シングルトンパターンの意味があります。通常、工場のクラスには、ハッシュテーブル、ベクトルなどのオブジェクトを保存するためのセットタイプメンバー変数があります。Java、データベース接続プール、スレッドプールなどは、Enyuanモードを使用するアプリケーションです。
Java関連のコンテンツについては、このサイトに興味のある読者は、「Javaデータ構造とアルゴリズムのチュートリアル」、「Java操作DOMノードのヒントの概要」、「Javaファイルの要約およびディレクトリ操作のヒント」、「Java Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。