1

flyweight パターンを適用するには、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);
    }
}
4

2 に答える 2

5

パターンが明らかでない場合もありますが、それが役に立たないというわけではありません。残念ながらフライ級のパターンを間違って理解していました。

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

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

于 2016-10-02T14:40:15.610 に答える
0

Flyweightが伝えているのは、単に「不変オブジェクトを処理する方法」です。

  • ある種のオブジェクトが不変である場合 (私は通常、すべてのオブジェクトが可能な限り不変であることを好みます)、
  • そして、いくつかの属性セットを使用して、アプリケーション内で作成されたその種のオブジェクトがあります。例:不変 Personオブジェクトは、name = "John", age = 20
  • name = "John", age = 20そして、アプリケーションの実行 ( ) でしばらくすると、まったく同じような別のオブジェクトが得られます。
  • 以前に作成したものを使用するだけで、別のものを作成する必要はありません (不変であるため、心配する必要はありません。その後、属性は変更されません)。

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

于 2016-10-05T03:07:30.520 に答える