フライ級モード:テクノロジーを共有することで、多数の細かいオブジェクトを効果的にサポートできます。
Fayn Yuan Modeは、Yan Hongの「Java and Mode」で、単純なユーンモードとコンポジットを楽しむユーアンモードに分割されます。複合モードでcompositeを楽しむ元は共有できません。ユアンオブジェクトを楽しむための鍵は、内部状態と外部状態を区別することです。これらの2つの「一致」は、理解するのが難しすぎます。翻訳が良くないと言っているわけではありませんが、私の理解能力が貧弱であるか、「再利用可能なオブジェクト指向ソフトウェアのデザインパターン要素」の翻訳バージョンは内部および外部オブジェクトに翻訳されています。それは比較的単純であり、強すぎる概念的なものの文学的な匂いに気まずいと感じています。ここの文字は、「デザインパターンの再利用可能なオブジェクト指向ソフトウェアの基本」というステートメントを使用します。これは、単純なモードと複合モードを区別しませんが、非共有コンテスト級(「Java and Mode」では、複合の楽しみが共有できないことを示しています)。ここでは、楽しみの役割を共有できないと言います。このようにして、楽しみモードのキャラクターには次のものがあります。
Xiangyuanモデルのクラスの制度図は次のとおりです。
Java.lang.String Designで百科事典パターンを使用する場合、次のコードスニペットなど、Javaの文字列が常に共有されることがわかります。
文字列m = "a"; string n = "a"; system.out.println(m == n);
これは真で出力され、mとnが同じインスタンスを指していることを示し、メモリには「a」が1つしかないことを示します。これは、Yuanモードをストリングで使用する方法です。
テキストの編集とストレージプロセスでのXiangyuanモードの使用。ここでは、この記事はラインオブジェクトで構成されており、ラインオブジェクトはいくつかの文字オブジェクトで構成されていると想定されています。ただし、各文字が独自のオブジェクトを保存すると、投稿には数千の文字オブジェクトがあり、システムメモリを真剣に消費し、受け入れられないランタイムオーバーヘッドを引き起こします。良い方法は、Xiangyuanモードを使用して、内部の不変の状態としてASCII文字をエンコードする値を保存し、文字オブジェクトを共有し、相対的な文字の色やサイズなどのフォーマットされたデータをクライアントによって維持し、ランタイム中に外部から渡すことができます。各行は、普遍的なオブジェクト(文字オブジェクト)で構成される非共有普遍的なオブジェクトです。
百科事典パターンの単純な構造の例を見てみましょう。
/ ***文字*/パブリッククラスレター{private string name;パブリックレター(文字列名){this.name = name; } public string getname(){return name; }} / ** *文字オブジェクトを生成するXiangyuan Factory(Singleton Factory) private static letterfactory instance = new LetterFactory(); private retterfactory(){map = new hashmap <string、lette>(); } public static retterFactory getInstance(){return instance; } public void add(letter letter){if(letter!= null &&!map.containskey(lette.getName())){map.put(letter.getName()、lette); } system.out.println( "map.size ====" + map.size()); } public Letter get(string name){return map.get(name); }} public class test {public static void main(string [] args){retterfactory factory = letterfactory.getInstance(); string word = "Easiness"; addletterbyname(Factory、word); getletter(工場、単語); } //文字オブジェクトの追加void addletterbyname(retterfactory factory、string word){for(char c:word.tochararray()){factory.add(new lette(c + "")); }} //出力文字オブジェクトStatic void getLetter(letterFactory Factory、string word){for(char c:word.tochararray()){system.out.println(factory.get(c + "")); }}}印刷:
map.size ==== 1 map.size ==== 2 map.size ==== 2 map.size ===== 3 map.size ==== 4 map.size ==== 5 map.size ==== 5 flyweight.letter@3343c8b3 flyweight.letter@272d7a10 flyweight.let.let.let.let.let.letter flyweight.letter@1aa8c488 flyweight.letter@3dfeca64 flyweight.letter@22998b08 flyweight.letter@1aa8c488