2009-04-03 13 views

答えて

16

遅延割り当ては、リソースが実際に必要になるまでリソースを割り当てないことを意味します。これはシングルトンオブジェクトでは一般的ですが、厳密に言えば、リソースができるだけ遅く割り当てられるときは、遅延割り当ての例があります。

リソースを実際に必要とするまでリソースの割り当てを遅らせることで、起動時間を短縮できます。また、実際にオブジェクトを使用することがない場合は、割り当てを完全になくすこともできます。これとは対照的に、後で必要とするリソースを事前に割り当てることができます。これにより、起動時間を犠牲にして後で実行するほうが効率的になります。また、後でプログラムの実行に失敗する可能性もありません。このコードはスレッドセーフではないことに注意してください

public class Widget { 
    private Widget singleton; 

    public static Widget get() { 
     if (singleton == null) { 
      singleton = new Widget(); 
     } 
     return singleton; 
    } 

    private Widget() { 
     // ... 
    } 

    // ... 
} 

次のコードは遅延し、割り当てられたシングルトンの例を提供します。ほとんどの場合、get()メソッドへのアクセスは、何らかの方法で同期する必要があります。

同様の(おそらくより一般的な)概念はlazy initializationです。

+0

は、「late objects」と「lazy init」の同義語ですか?このテキストのタイトルのように* Javaのプログラミング方法:Late Objects Version *?私はグーグルではありますが、そのテキスト以外の参照は見つかりませんでした。 – hydeph

+1

@hydephのように、Deitelには、最初の章が手続き型であり(後でクラス/オブジェクトを導入する)、「初期オブジェクト」を持つ「後期オブジェクト」という2つのバージョンがあり、クラス/オブジェクトすぐに導入されます。彼らは、これらの教授スタイルを区別するために、「遅いオブジェクト」と「初期のオブジェクト」を使用しています。遅延初期化との関係はありません。 –

関連する問題