ウェブサイトのプロジェクトの要件を表示
小規模アウトソーシングプロジェクト、製品のショーケースサイトを作るために、クライアントのA、よく感じ友人の顧客Aは、私はとても商品にウェブサイトを行うことを願っていますが、要件が少し異なります。
- ニュースの形で発行さがあり、顧客の要件
- ブログの形で出版を必要とするお客様があります。
- あなたはマイクロチャンネル公衆数の形で公開したいお客様
従来のソリューションは、プロジェクトサイトを表示します
- 直接コピー&ペーストし、お客様のご要望に応じて、カスタム変更
- 各サイトのためのスペースをレンタル
- 回路図設計プログラム
プロジェクトを表示するには、サイトへの従来のソリューション - 解析
- サーバリソースの無駄が生じ、オブジェクトの同じサイトインスタンスの多くの同等のものを処理するために、複数の仮想空間に分かれている場合、サイトは、構造的類似性が高い必要はなく、高トラフィックのウェブサイト
- ソリューション:ハードディスクにそれに関連するコードとデータを共有するために、Webサイトに統合され、メモリ、CPU、データベース領域、サーバーのリソースが届くに共有することができますが、サーバーのリソースを削減します
- コードは、一例であり、維持し、拡張することが容易であるので
- 上記の解決策のアイデアは、フライ級を解決するために使用することができます
フライ級の基本的な導入
基本的な導入
- また、フライボリュームモードとして知られているフライ級(Flyweightパターン)、:使用は粒度の細かい多数のオブジェクトをサポートするために共有します
- 一般に、システムのパフォーマンスの問題に対処するために、低レベルの現像システムで使用されます。優れた接続オブジェクトを作成することであるデータベース接続プールと同様に、我々は我々が必要としない場合には、作成し、これらの接続オブジェクトを再作成し、直接回避するために使用されている必要があり
- 必要なときにシステムが同様の多数のオブジェクト、バッファ・プールを有する場合、廃棄物の問題を解決するためのフライメモリ繰り返しオブジェクト。常に新しいオブジェクトを作成する必要はありません、あなたはバッファプールから取得することができます。効率を向上させながらこれは、システムメモリを減らすことができます
- フライ級のパターン古典的なシナリオは、技術プール、文字列定数プール、データベース接続プール、プールなどのアプリケーションはフライ級されている、Flyweightパターンは、セル技術を達成するための重要な方法であります
図フライ級のクラスの原理
クラス図の説明は、
図面の原理を説明するために-その(役割と責任モード)
- インターフェースのフライフライ抽象文字、彼の製品は抽象クラスで定義オブジェクトの内部状態および外部状態の両方(後述)または
- ConcreteFlyWeightフライ級は、特定の役割である、特定の製品カテゴリで、ビジネスに関連する抽象定義の役割を達成するために
- UnSharedConcreteFlyWeightが役割を共有していない、一般的にフライ級の工場には表示されません。
- プールからオブジェクトを取得するための方法を提供しながら、セル容器(コレクション)を構築するためFlyWeightFactoryフライ級ファクトリクラス
内部状態と外部の状態
外出例えば、バックギャモン、チェッカー、それらはオブジェクトのピースの数が多い、とのみ黒と白のバックギャモン進み、色がよりチェッカー少し個カラー片の内部状態ように、個の異なる位置の差、つまり、場合我々Lazi、Lazi色が与えられるが、位置が変化しているので、状態の外部座標ポーン片であります
-
きめの細かいと共有オブジェクト:フライパターンは2つの要求をしました。ここでは、2つの部分に内部状態および外部状態、すなわち、オブジェクト情報を含む内部状態および外部状態
-
これは、共有オブジェクト情報のうち、内部状態を参照し、ストアは、オブジェクトのフライ級内の環境によって変化しません
-
外部状態は、マーカーオブジェクトを参照する依存性の変化は、状態を共有していない、環境に変更されています。
-
たとえば、次のように行くには、理論的に作品を置くことができる361人の欠員を持って、すべての二、300枚は、単一のサーバがあれば、囲碁のゲームをプレイすることがより困難に選手をサポートするため、限られたメモリ空間の、オブジェクトを生成し、ゲームを持っている可能性がありますFlyweightパターン片に対処するため、片は問題の良い解決策は、オーバーヘッドオブジェクトように、2つのだけのインスタンスオブジェクトに低減することができます
フライ級の決意ウェブサイトショーのプロジェクト
-
アプリケーションの例としては、必要が
使用Flyweightパターンは、サイト先に提案し、アウトソーシングを完了しています -
アイデアと分析手法(図クラス)
-
コードの実装
// 网站工厂类,根据需要返回压一个网站
public class WebSiteFactory {
//集合, 充当池的作用
private HashMap<String, ConcreteWebSite> pool = new HashMap<>();
//根据网站的类型,返回一个网站, 如果没有就创建一个网站,并放入到池中,并返回
public WebSite getWebSiteCategory(String type) {
if(!pool.containsKey(type)) {
//就创建一个网站,并放入到池中
pool.put(type, new ConcreteWebSite(type));
}
return (WebSite)pool.get(type);
}
//获取网站分类的总数 (池中有多少个网站类型)
public int getWebSiteCount() {
return pool.size();
}
}
アプリケーションのソースコードJDK-Intergerのフライ級分析
- フライ級の整数
- + +ソースコード解析は、デバッグを説明しました
package com.atguigu.jdk;
public class FlyWeight {
public static void main(String[] args) {
// TODO Auto-generated method stub
//如果 Integer.valueOf(x) x 在 -128 --- 127 直接,就是使用享元模式返回,如果不在
//范围类,则仍然 new
//小结:
//1. 在 valueOf 方法中,先判断值是否在 IntegerCache 中,如果不在,就创建新的 Integer(new), 否则,就直接从 缓存池返回
//2. valueOf 方法,就使用到享元模式
//3. 如果使用 valueOf 方法得到一个 Integer 实例,范围在 -128 - 127 ,执行速度比 new 快
Integer x = Integer.valueOf(127); // 得到 x 实例,类型 Integer Integer y = new Integer(127); // 得 到 y 实 例 , 类 型 Integer
// Integer z = Integer.valueOf(127);//..
Integer w = new Integer(127);
System.out.println(x.equals(y)); // 大小,true System.out.println(x == y ); // false System.out.println(x == z );
// // true System.out.println(w == x ); // false System.out.println(w == y
// ); // false
Integer x1 = Integer.valueOf(200);
Integer x2 = Integer.valueOf(200);
System.out.println("x1==x2" + (x1 == x2)); // false
}
}
注意事項や詳細元のモードをお楽しみください
注意事項や詳細元のモードをお楽しみください
- このような理解フライ級、「楽しむ」、共有が言う、「メタ」とオブジェクト
- システムは、メモリを大量に消費するオブジェクトの数が多いと、オブジェクトの状態が時間のほとんどを外部化することができ、
我々はフライ級の使用を検討することができます - 固有の識別コードが決定されると、メモリ内の場合、一意の識別コードによって識別されたオブジェクトを用いて、返された
ハッシュマップ/ハッシュテーブルストレージ - フライパターンは、プログラムメモリの使用量を減少させる、大幅に低減オブジェクトを作成し、効率を改善します
- フライパターンは、システムの複雑さを増加させます。有する内部状態と外部の状態と外部の状態分離する必要が
内部状態を変更しないでください、硬化性を我々はフライ級に留意すべきで使用するか、変更された
場所を。 - フライ級を使用する場合は、注意内部状態と外部の状態、およびファクトリクラスを制御する必要性を分割。
- フライパターン古典的なシナリオは、文字列定数プール、データベース接続プールのように、プールシーンバッファが必要です