2016-10-02 11 views
0

フライウェイトパターンを適用するには、Objectプロパティを組み込みプロパティと外部プロパティに分割する必要があります。固有のプロパティはObjectをユニークにしますが、外部のプロパティはクライアントコードによって設定され、異なる操作を実行するために使用されます。フライウェイトパターンの使用はありません。本当に便利ですか?

しかし私の質問は、インスタンス変数として(以下のEmailクラスを参照)、固有のプロパティと外部プロパティの両方を持つことができず、ループの外にオブジェクトを1つ作成してループ内のパラメータを設定し、

public class Test { 
    public static void main(String[] args) { 
     Email ob = new Email(); 
     for (int i = 0; i < 10; i++) { 
      ob.sender = String.valueOf(i); 
      ob.sendEmail(); 
     } 
    } 
} 

public class Email { 
    public String sender; 
    public void sendEmail() 
    { 
     System.out.println("Email sent to sender:"+sender); 
    } 
} 
+0

実際、Flyweightはパターンではなく、Javaでメモリを節約するための回避策です。それはoopとは関係ありません –

+0

@SupunWijerathne、flyweightは標準的なデザインパターンの本のパターン、_再利用可能なオブジェクト指向ソフトウェアの要素_です。それがパターンではなく、OOPとは何の関係もないということは完全なナンセンスです。このパターンはJava固有のものではありません。 GoF OOPパターンは言語に依存しません。 – jaco0646

+0

@ jaco0646 Java特有のものではありません。しかし、OOとはまったく関係がありません。なぜあなたはそのナンセンスを言っていますか? OOとは何ですか?設計パターンとは、ソフトウェアの構造的側面を考慮して、問題を解決する方法を示すものです。フライウェイトがパターンの場合、「マージソート」がパターンであると言う人がいれば、間違っているとは見えません。あなたのアイデアを見たいと思っています。 :)) –

答えて

3

パターンが明白でない場合もありますが、それらが役に立たないわけではありません。そして、私はあなたがフライウェイトパターンを間違って理解するのは恐れています。

主なアイデアは、すでに使用されている同じオブジェクトを共有することによってメモリ使用を最小限に抑えることです。通常、値を保持し、それらをいくつかの基準で戻すことを担うデータ構造が内部的にあります。新しい要素を作成するのではなく、既存の要素を参照します。

実際には便利です。たとえば、JDKではこのパターンを使用してIntegerキャッシュ(キャッシュを有効に戻すための小さな範囲の値を保持)とStringプール(intern()メソッドを参照)を提供します。

+0

時には私は人々がパターンを使用するように強制することがあります。 –

+0

@NikolasCharalambidis ...不要な場合 – Andrew

0

単に何Flyweightを告げること「不変オブジェクトがどのように処理すべきかの方法」です。オブジェクトのいくつかのタイプが不変である場合

  • 、(私は一般的に、すべてのオブジェクトは、可能な限り不変であることを好む)そして、あなたは、属性のいくつかのセット、例で、アプリケーション内で作成されたオブジェクトのようなものを持っています:不変Personオブジェクトがname = "John", age = 20
  • で作成されていないそして、あなたは、アプリケーションのexcecution(name = "John", age = 20)でいくつかの時間後に、正確にそのような別のオブジェクト、
  • は、単に以前に1作成を使用する必要があり、別のものを作成する必要(不要れますimmutableなので心配ですが、後で属性が変わることはありません)

これは基本的にメモリを節約するための回避策です。オブジェクト指向とは何の関係もありません。

関連する問題