SlideShare una empresa de Scribd logo
1 de 20
(Java)
@j5ik2o
@j5ik2o



 Scala
                         6
         5    Java
             Scala

 DDD(                        )

          (4,5,6     )
Singleton   )

                1


GoF
new


Hoge a = new Hoge(); // 1

Hoge b = new Hoge(); // 2       NG




                            1
public class Cache {
    //
 public static final Cache INSTANCE = new
Cache();
    private Cache() { } // new

    public void put(String key, Object value){ ... }
    public Object get(String key) { ... }
}
Cache.INSTANCE.put(key, value)
Object value = Cache.INSTANCE.get(key)
public class Cache {
    private static final Cache INSTANCE = new Cache();
    private Cache() { }
    public static Cache getInstance() {
      return INSTNACE;
    }
    public void put(String key, Object value){ ... }
    public Object get(String key) { ... }
}
Cache.getInstance().put(key, value)
Object value = Cache.getInstance().get(key)
public class Cache {
 private static ThreadLocal<Cache> threadLocal =
new ThreadLocal<Cache>() {
   @Override protected Cache initialValue() {
     return new Cache();
   }
 };
    public static Cache getInstnace() {
      return threadLocal.get();
    }
    public Object get(String key) { /* ... */ }
    public void put(String key, Object value) { /* ... */
                                                         }
}
1:
Effective Java                   3




public class CacheClient {
    //
    public void process() { getCache().put(...); // ... }
    // Cache
    Cache getCache() {
        return Cache.getInstance();
        // ↑

        //                            private

        // new Cache() { ... }

        //                                      ...

    }
}
public class SingletonCache implements Cache {
    private static SingletonCache instance;
    public static SingletonCache getInstnace() {
      return instance;
    }
    @Override public Object get(String key) { /* ... */ }
    @Override public void put(String key, Object value) { /* ... */ }
}
public class CacheClient {
    // ...
    Cache getCache() {
        return new Cache(){ /*             */ };

    }
}
2:
         P40-41
     singleton
3:

                    readObject
                w( o   )w!!!

Serializable

                                  transient
                          ...

  readResolve
  (GC)
         ...
  private Object readResolve() throws
  ObjectStreamException {
   return INSTANCE; //
  }
enum
public enum Cache {
    INSTANCE;
 public vod put(String key, Object
value) { /* ... */ }
 public Object get(String key) {/* ...
*/ }
}
Cache.INSTANCE.put(key, value);
enum                             Jad        ...
public final class Cache extends Enum<Cache>
{
    public static final EnumSingleton INSTANCE;
    private static final Cache $VALUES[];
  static { INSTANCE = new
EnumSingleton("INSTANCE", 0);
    $VALUES = (new Cache[] { INSTANCE }); }
    private Cache(String s, int i){ super(s, i); }
    // values, valueOf ...
}
(´    ∀      )
public class Singleton {
    private static Singleton instance;
 public synchronized static Singleton
getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
(    д )               ?!
public class Singleton {
        //

    private static class InstanceHolder {
   private static final Singleton INSTANCE = new
Singleton();
    }
    public static Singleton getInstance() {
        return InstanceHolder.INSTANCE;
    }
}
..(llil!´Д`lil)n{…??
public class Singleton {
    private static volatile Singleton instance
    public static Singleton getInstance() {
     Singleton result = instance; // (1)

     if (result == null) { // (2)             =>

         synchronized (Singleton.class) { // (3)            :

          result = instance; // (4)

          if (result == null) { // (5)

              result = instance = new Singleton(); // (6)

          }
         } //             :

     }
     return result;
}
getInstnace

              ”   ”
Scala   object

object Cache {
 def put(key:String, value:Any):Unit
= ...
    def get(key:String):Any = ...
}
Cache.put(key, value)
val value = Cache.get(key)
object        Singleton
public final class Cache$ implements ScalaObject
{
 public static final Cache$ MODULE$ = new
Cache$();
    private Cache$() { /* ... */ }
 public void put(String key, Object value) { /* ...
*/ }
    public Object get(String key) { /* ... */ }
}
Cache$.MODULE$.put(key, value)
Object value = Cache$.MODULE$.get(key)

Más contenido relacionado

La actualidad más candente

C# Application program UNIT III
C# Application program UNIT IIIC# Application program UNIT III
C# Application program UNIT III
Minu Rajasekaran
 
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
julien.ponge
 
Java 7 at SoftShake 2011
Java 7 at SoftShake 2011Java 7 at SoftShake 2011
Java 7 at SoftShake 2011
julien.ponge
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
julien.ponge
 
ikh331-06-distributed-programming
ikh331-06-distributed-programmingikh331-06-distributed-programming
ikh331-06-distributed-programming
Anung Ariwibowo
 

La actualidad más candente (20)

#JavaFX.forReal() - ElsassJUG
#JavaFX.forReal() - ElsassJUG#JavaFX.forReal() - ElsassJUG
#JavaFX.forReal() - ElsassJUG
 
Java Programming - 06 java file io
Java Programming - 06 java file ioJava Programming - 06 java file io
Java Programming - 06 java file io
 
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
 
JNI - Java & C in the same project
JNI - Java & C in the same projectJNI - Java & C in the same project
JNI - Java & C in the same project
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency Gotchas
 
Hidden Treasures of the Python Standard Library
Hidden Treasures of the Python Standard LibraryHidden Treasures of the Python Standard Library
Hidden Treasures of the Python Standard Library
 
Basic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time APIBasic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time API
 
What’s new in C# 6
What’s new in C# 6What’s new in C# 6
What’s new in C# 6
 
Nantes Jug - Java 7
Nantes Jug - Java 7Nantes Jug - Java 7
Nantes Jug - Java 7
 
C# Application program UNIT III
C# Application program UNIT IIIC# Application program UNIT III
C# Application program UNIT III
 
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
 
Java 7 LavaJUG
Java 7 LavaJUGJava 7 LavaJUG
Java 7 LavaJUG
 
In kor we Trust
In kor we TrustIn kor we Trust
In kor we Trust
 
Java 7 at SoftShake 2011
Java 7 at SoftShake 2011Java 7 at SoftShake 2011
Java 7 at SoftShake 2011
 
Java 7 JUG Summer Camp
Java 7 JUG Summer CampJava 7 JUG Summer Camp
Java 7 JUG Summer Camp
 
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
 
JCConf 2015 - 輕鬆學google的雲端開發 - Google App Engine入門(上)
JCConf 2015  - 輕鬆學google的雲端開發 - Google App Engine入門(上)JCConf 2015  - 輕鬆學google的雲端開發 - Google App Engine入門(上)
JCConf 2015 - 輕鬆學google的雲端開發 - Google App Engine入門(上)
 
ikh331-06-distributed-programming
ikh331-06-distributed-programmingikh331-06-distributed-programming
ikh331-06-distributed-programming
 
The uniform interface is 42
The uniform interface is 42The uniform interface is 42
The uniform interface is 42
 

Destacado

Destacado (7)

第一回Scala会議
第一回Scala会議第一回Scala会議
第一回Scala会議
 
コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門
 
Sbt職人のススメ
Sbt職人のススメSbt職人のススメ
Sbt職人のススメ
 
Scala with DDD
Scala with DDDScala with DDD
Scala with DDD
 
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
DeNAの分析を支える分析基盤
DeNAの分析を支える分析基盤DeNAの分析を支える分析基盤
DeNAの分析を支える分析基盤
 

Similar a 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - シングルトンパターン(Java)

Javaoneconcurrencygotchas 090610192215 Phpapp02
Javaoneconcurrencygotchas 090610192215 Phpapp02Javaoneconcurrencygotchas 090610192215 Phpapp02
Javaoneconcurrencygotchas 090610192215 Phpapp02
Tarun Kumar
 
Java осень 2012 лекция 2
Java осень 2012 лекция 2Java осень 2012 лекция 2
Java осень 2012 лекция 2
Technopark
 
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
Chang W. Doh
 
A linked stack is implemented using a standard Node class as follows.pdf
A linked stack is implemented using a standard Node class as follows.pdfA linked stack is implemented using a standard Node class as follows.pdf
A linked stack is implemented using a standard Node class as follows.pdf
kisgstin23
 
From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()
José Paumard
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
 
create a new interface called DropoutStackADT for representing a dro.pdf
create a new interface called DropoutStackADT for representing a dro.pdfcreate a new interface called DropoutStackADT for representing a dro.pdf
create a new interface called DropoutStackADT for representing a dro.pdf
f3apparelsonline
 
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docxNew folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
curwenmichaela
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
HamletDRC
 

Similar a 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - シングルトンパターン(Java) (20)

Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency Gotchas
 
Javaoneconcurrencygotchas 090610192215 Phpapp02
Javaoneconcurrencygotchas 090610192215 Phpapp02Javaoneconcurrencygotchas 090610192215 Phpapp02
Javaoneconcurrencygotchas 090610192215 Phpapp02
 
Concurrency gotchas
Concurrency gotchasConcurrency gotchas
Concurrency gotchas
 
Design in the small
Design in the smallDesign in the small
Design in the small
 
Java осень 2012 лекция 2
Java осень 2012 лекция 2Java осень 2012 лекция 2
Java осень 2012 лекция 2
 
Hey Kotlin, How it works?
Hey Kotlin, How it works?Hey Kotlin, How it works?
Hey Kotlin, How it works?
 
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
 
2020 Droid Knights CustomLint 적용기
2020 Droid Knights CustomLint 적용기2020 Droid Knights CustomLint 적용기
2020 Droid Knights CustomLint 적용기
 
Nice to meet Kotlin
Nice to meet KotlinNice to meet Kotlin
Nice to meet Kotlin
 
A linked stack is implemented using a standard Node class as follows.pdf
A linked stack is implemented using a standard Node class as follows.pdfA linked stack is implemented using a standard Node class as follows.pdf
A linked stack is implemented using a standard Node class as follows.pdf
 
From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
 
Workshop Scala
Workshop ScalaWorkshop Scala
Workshop Scala
 
create a new interface called DropoutStackADT for representing a dro.pdf
create a new interface called DropoutStackADT for representing a dro.pdfcreate a new interface called DropoutStackADT for representing a dro.pdf
create a new interface called DropoutStackADT for representing a dro.pdf
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
 
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docxNew folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVM
 
OOP Lab Report.docx
OOP Lab Report.docxOOP Lab Report.docx
OOP Lab Report.docx
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
 

Último

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Último (20)

08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 

第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - シングルトンパターン(Java)

  • 2. @j5ik2o Scala 6 5 Java Scala DDD( ) (4,5,6 )
  • 3. Singleton ) 1 GoF
  • 4. new Hoge a = new Hoge(); // 1 Hoge b = new Hoge(); // 2 NG 1
  • 5. public class Cache { // public static final Cache INSTANCE = new Cache(); private Cache() { } // new public void put(String key, Object value){ ... } public Object get(String key) { ... } } Cache.INSTANCE.put(key, value) Object value = Cache.INSTANCE.get(key)
  • 6. public class Cache { private static final Cache INSTANCE = new Cache(); private Cache() { } public static Cache getInstance() { return INSTNACE; } public void put(String key, Object value){ ... } public Object get(String key) { ... } } Cache.getInstance().put(key, value) Object value = Cache.getInstance().get(key)
  • 7. public class Cache { private static ThreadLocal<Cache> threadLocal = new ThreadLocal<Cache>() { @Override protected Cache initialValue() { return new Cache(); } }; public static Cache getInstnace() { return threadLocal.get(); } public Object get(String key) { /* ... */ } public void put(String key, Object value) { /* ... */ } }
  • 8. 1: Effective Java 3 public class CacheClient { // public void process() { getCache().put(...); // ... } // Cache Cache getCache() { return Cache.getInstance(); // ↑ // private // new Cache() { ... } // ... } }
  • 9. public class SingletonCache implements Cache { private static SingletonCache instance; public static SingletonCache getInstnace() { return instance; } @Override public Object get(String key) { /* ... */ } @Override public void put(String key, Object value) { /* ... */ } } public class CacheClient { // ... Cache getCache() { return new Cache(){ /* */ }; } }
  • 10. 2: P40-41 singleton
  • 11. 3: readObject w( o )w!!! Serializable transient ... readResolve (GC) ... private Object readResolve() throws ObjectStreamException { return INSTANCE; // }
  • 12. enum public enum Cache { INSTANCE; public vod put(String key, Object value) { /* ... */ } public Object get(String key) {/* ... */ } } Cache.INSTANCE.put(key, value);
  • 13. enum Jad ... public final class Cache extends Enum<Cache> { public static final EnumSingleton INSTANCE; private static final Cache $VALUES[]; static { INSTANCE = new EnumSingleton("INSTANCE", 0); $VALUES = (new Cache[] { INSTANCE }); } private Cache(String s, int i){ super(s, i); } // values, valueOf ... }
  • 14.
  • 15. ∀ ) public class Singleton { private static Singleton instance; public synchronized static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
  • 16. ( д ) ?! public class Singleton { // private static class InstanceHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return InstanceHolder.INSTANCE; } }
  • 17. ..(llil!´Д`lil)n{…?? public class Singleton { private static volatile Singleton instance public static Singleton getInstance() { Singleton result = instance; // (1) if (result == null) { // (2) => synchronized (Singleton.class) { // (3) : result = instance; // (4) if (result == null) { // (5) result = instance = new Singleton(); // (6) } } // : } return result; }
  • 18. getInstnace ” ”
  • 19. Scala object object Cache { def put(key:String, value:Any):Unit = ... def get(key:String):Any = ... } Cache.put(key, value) val value = Cache.get(key)
  • 20. object Singleton public final class Cache$ implements ScalaObject { public static final Cache$ MODULE$ = new Cache$(); private Cache$() { /* ... */ } public void put(String key, Object value) { /* ... */ } public Object get(String key) { /* ... */ } } Cache$.MODULE$.put(key, value) Object value = Cache$.MODULE$.get(key)

Notas del editor

  1. \n
  2. &amp;#x304B;&amp;#x3068;&amp;#x3046;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x6700;&amp;#x8FD1;&amp;#x5F90;&amp;#x3005;&amp;#x306B;&amp;#x5B9F;&amp;#x4F53;&amp;#x3092;&amp;#x6652;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3057;&amp;#x3089;&amp;#x306A;&amp;#x3044;&amp;#x4EBA;&amp;#x3044;&amp;#x308B;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x30C0;&amp;#x30A4;&amp;#x3061;&amp;#x3083;&amp;#x3093;&amp;#x306E;&amp;#x4E0A;&amp;#x53F8;&amp;#x3068;&amp;#x3044;&amp;#x3048;&amp;#x3070;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304B;&amp;#x306D;&amp;#x3002;&amp;#x6280;&amp;#x8853;&amp;#x7684;&amp;#x306A;&amp;#x7A81;&amp;#x304D;&amp;#x4E0A;&amp;#x3052;&amp;#x304C;&amp;#x53B3;&amp;#x3057;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x9811;&amp;#x5F35;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x4E0A;&amp;#x53F8;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;&amp;#x306F;&amp;#x3044;&amp;#x3002;\n&amp;#x6700;&amp;#x8FD1;&amp;#x306F;Scala&amp;#x306E;&amp;#x8A18;&amp;#x4E8B;&amp;#x66F8;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x5165;&amp;#x9580;&amp;#x8005;&amp;#x7528;&amp;#x306E;&amp;#x8A18;&amp;#x4E8B;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x3084;&amp;#x3059;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;java-ja&amp;#x3067;&amp;#x306F;&amp;#x3001;yuroyoro&amp;#x3055;&amp;#x3093;&amp;#x306B;&amp;#x30EC;&amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x983C;&amp;#x307F;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x3042;&amp;#x308A;&amp;#x304C;&amp;#x3068;&amp;#x3046;&amp;#x3054;&amp;#x3056;&amp;#x3044;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;\n&amp;#x305D;&amp;#x308C;&amp;#x3068;&amp;#x3001;DDD&amp;#x3082;&amp;#x7D50;&amp;#x69CB;&amp;#x30C7;&amp;#x30A3;&amp;#x30FC;&amp;#x30D7;&amp;#x306B;&amp;#x3084;&amp;#x3063;&amp;#x3066;&amp;#x307E;&amp;#x3059;&amp;#x3002;2003&amp;#x5E74;&amp;#x306E;&amp;#x767A;&amp;#x520A;&amp;#x3067;&amp;#x5F85;&amp;#x671B;&amp;#x306E;&amp;#x548C;&amp;#x8A33;&amp;#x304C;&amp;#x3067;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x30D5;&amp;#x30A1;&amp;#x30A6;&amp;#x30E9;&amp;#x30FC;&amp;#x6C0F;&amp;#x3082;&amp;#x30B1;&amp;#x30C3;&amp;#x30C8;&amp;#x30D9;&amp;#x30C3;&amp;#x30AF;&amp;#x6C0F;&amp;#x3082;&amp;#x7D76;&amp;#x8CDB;&amp;#x3002;&amp;#x65E5;&amp;#x672C;&amp;#x3060;&amp;#x3068;&amp;#x548C;&amp;#x7530;&amp;#x3055;&amp;#x3093;&amp;#x7B46;&amp;#x982D;&amp;#x306B;JavaEE&amp;#x52C9;&amp;#x5F37;&amp;#x4F1A;&amp;#x306B;&amp;#x3088;&amp;#x308A;&amp;#x8CA2;&amp;#x732E;&amp;#x304C;&amp;#x5927;&amp;#x304D;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;&amp;#x79C1;&amp;#x3068;&amp;#x30C0;&amp;#x30A4;&amp;#x3061;&amp;#x3083;&amp;#x3093;&amp;#x3067;&amp;#x4E3B;&amp;#x306B;2&amp;#x90E8;&amp;#x306E;\n
  3. &amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3068;&amp;#x306F;&amp;#x3001;1&amp;#x500B;&amp;#x3057;&amp;#x304B;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x4F5C;&amp;#x3089;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x3067;&amp;#x3001;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DE;&amp;#x304C;&amp;#x6CE8;&amp;#x610F;&amp;#x3092;&amp;#x3057;&amp;#x3066;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;1&amp;#x500B;&amp;#x3057;&amp;#x304B;&amp;#x4F5C;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x3092;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x4E0A;&amp;#x3067;&amp;#x8868;&amp;#x73FE;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x610F;&amp;#x5473;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  4. &amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3057;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x81EA;&amp;#x7531;&amp;#x306B;new&amp;#x3055;&amp;#x305B;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x3001;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x6570;&amp;#x3092;&amp;#x5236;&amp;#x5FA1;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DE;&amp;#x304C;&amp;#x9811;&amp;#x5F35;&amp;#x3063;&amp;#x3066;&amp;#x5236;&amp;#x5FA1;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x3069;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3057;&amp;#x3066;&amp;#x3082;1&amp;#x3064;&amp;#x3060;&amp;#x3051;&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x4ED5;&amp;#x7D44;&amp;#x307F;&amp;#x3092;&amp;#x63D0;&amp;#x4F9B;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x76EE;&amp;#x7684;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  5. &amp;#x4F8B;&amp;#x3048;&amp;#x3070;&amp;#x3001;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x5B9A;&amp;#x6570;&amp;#x5316;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x3092;private&amp;#x306B;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x306F;&amp;#x30A4;&amp;#x30FC;&amp;#x30AC;&amp;#x30FC;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x5178;&amp;#x578B;&amp;#x7684;&amp;#x306B;&amp;#x306F;&amp;#x3053;&amp;#x308C;&amp;#x3067;&amp;#x5341;&amp;#x5206;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x5B9A;&amp;#x6570;&amp;#x306F;&amp;#x3069;&amp;#x3053;&amp;#x3067;&amp;#x3082;\n
  6. &amp;#x6B21;&amp;#x306F;&amp;#x3001;getInstance&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x7528;&amp;#x610F;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nJVM&amp;#x306E;&amp;#x6700;&amp;#x9069;&amp;#x5316;&amp;#x3092;&amp;#x8003;&amp;#x3048;&amp;#x308C;&amp;#x3070;&amp;#x305D;&amp;#x308C;&amp;#x307B;&amp;#x3069;&amp;#x795E;&amp;#x7D4C;&amp;#x8CEA;&amp;#x306B;&amp;#x306A;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306E;&amp;#x30E1;&amp;#x30EA;&amp;#x30C3;&amp;#x30C8;&amp;#x306F;&amp;#x3001;API&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x5185;&amp;#x90E8;&amp;#x5B9F;&amp;#x88C5;&amp;#x3092;&amp;#x96A0;&amp;#x853D;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n\n
  7. &amp;#xFF1C;&amp;#xFF1C;&amp;#x3082;&amp;#x3046;&amp;#x3072;&amp;#x3068;&amp;#x3064;&amp;#x306E;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x4ECB;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x306B;&amp;#x3088;&amp;#x308B;&amp;#x30E1;&amp;#x30EA;&amp;#x30C3;&amp;#x30C8;&amp;#xFF1E;&amp;#xFF1E;\n&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306F;&amp;#x300C;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;1&amp;#x3064;&amp;#x3057;&amp;#x304B;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x300D;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x610F;&amp;#x5473;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;\n&amp;#x305D;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x306E;&amp;#x30B3;&amp;#x30F3;&amp;#x30C6;&amp;#x30AD;&amp;#x30B9;&amp;#x30C8;\n&amp;#x3042;&amp;#x308B;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306E;&amp;#x300C;&amp;#x7279;&amp;#x5B9A;&amp;#x306E;&amp;#x300D;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;1&amp;#x3064;&amp;#x3057;&amp;#x304B;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x3001;&amp;#x89E3;&amp;#x91C8;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x30FB;&amp;#x305F;&amp;#x3068;&amp;#x3048;&amp;#x3070;&amp;#x3001;&amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3084;&amp;#x3001;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x6BCE;&amp;#x306B;&amp;#x4F5C;&amp;#x308B;&amp;#x306A;&amp;#x3069;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x30FB;&amp;#x3053;&amp;#x306E;&amp;#x4F8B;&amp;#x3067;&amp;#x306F;&amp;#x3001; getInstance&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x305F;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3054;&amp;#x3068;&amp;#x306B;&amp;#x552F;&amp;#x4E00;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x8FD4;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3002;\n&amp;#x3000;&amp;#x30FB;&amp;#x5185;&amp;#x90E8;&amp;#x306E;&amp;#x5B9F;&amp;#x88C5;&amp;#x3067;&amp;#x306F;ThreadLocal&amp;#x3092;&amp;#x30B5;&amp;#x30D6;&amp;#x30AF;&amp;#x30E9;&amp;#x30C3;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x3057;&amp;#x3066;&amp;#x3001;initValue&amp;#x3067;&amp;#x521D;&amp;#x671F;&amp;#x5024;&amp;#x3092;&amp;#x8FD4;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x306E;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x306F;get&amp;#x304C;&amp;#x30C8;&amp;#x30EA;&amp;#x30AC;&amp;#x30FC;&amp;#x3068;&amp;#x306A;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5B9F;&amp;#x8CEA;&amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x306E;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  8. &amp;#x30C6;&amp;#x30B9;&amp;#x30C8;&amp;#x5BFE;&amp;#x8C61;&amp;#x304C;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3068;&amp;#x4F9D;&amp;#x5B58;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x3001;&amp;#x30C6;&amp;#x30B9;&amp;#x30C8;&amp;#x304C;&amp;#x5384;&amp;#x4ECB;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nCache&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x30E2;&amp;#x30C3;&amp;#x30AF;&amp;#x5B9F;&amp;#x88C5;&amp;#x306B;&amp;#x7F6E;&amp;#x304D;&amp;#x63DB;&amp;#x3048;&amp;#x305F;&amp;#x3044;&amp;#x3068;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3057;&amp;#x304B;&amp;#x3057;&amp;#x3001;private&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x3060;&amp;#x3068;&amp;#x30B5;&amp;#x30D6;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x5316;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x3092;protected&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x30B5;&amp;#x30D6;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x5316;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x3060;&amp;#x3051;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x5236;&amp;#x9650;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x3044;&amp;#x30EA;&amp;#x30B9;&amp;#x30AF;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30C8;&amp;#x30EC;&amp;#x30FC;&amp;#x30C9;&amp;#x30AA;&amp;#x30D5;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n&amp;#x3082;&amp;#x3046;&amp;#x4E00;&amp;#x3064;&amp;#x65B9;&amp;#x6CD5;&amp;#x306F;&amp;#x3001;Cache&amp;#x306E;&amp;#x632F;&amp;#x308B;&amp;#x821E;&amp;#x3044;&amp;#x3092;&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A7;&amp;#x30A4;&amp;#x30B9;&amp;#x3092;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3057;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x306E;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x5B9F;&amp;#x88C5;&amp;#x3068;&amp;#x3001;&amp;#x30E2;&amp;#x30C3;&amp;#x30AF;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x306E;&amp;#x5B9F;&amp;#x88C5;&amp;#x3092;&amp;#x30C6;&amp;#x30B9;&amp;#x30C8;&amp;#x306E;&amp;#x3068;&amp;#x304D;&amp;#x306B;&amp;#x4F7F;&amp;#x3044;&amp;#x5206;&amp;#x3051;&amp;#x308B;&amp;#x65B9;&amp;#x6CD5;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  9. &amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306B;&amp;#x3082;&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A7;&amp;#x30A4;&amp;#x30B9;&amp;#x3092;&amp;#x7528;&amp;#x610F;&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x30AF;&amp;#x30E9;&amp;#x30A4;&amp;#x30A2;&amp;#x30F3;&amp;#x30C8;&amp;#x306B;&amp;#x5BFE;&amp;#x3057;&amp;#x3066;JMock&amp;#x3068;&amp;#x304B;&amp;#x3067;&amp;#x30E2;&amp;#x30C3;&amp;#x30AF;&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x306A;&amp;#x308A;&amp;#x3001;&amp;#x30C0;&amp;#x30DF;&amp;#x30FC;&amp;#x306E;&amp;#x30E2;&amp;#x30C3;&amp;#x30AF;&amp;#x5B9F;&amp;#x88C5;&amp;#x3092;&amp;#x4F5C;&amp;#x308A;&amp;#x306A;&amp;#x308A;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x3067;&amp;#x3082;&amp;#x3001;Cache&amp;#x578B;&amp;#x3092;&amp;#x4F7F;&amp;#x3046;&amp;#x9650;&amp;#x308A;&amp;#x7F6E;&amp;#x3044;&amp;#x3066;&amp;#x306F;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x306E;&amp;#x6570;&amp;#x306E;&amp;#x7BA1;&amp;#x7406;&amp;#x304C;&amp;#x7D50;&amp;#x69CB;&amp;#x96E3;&amp;#x3057;&amp;#x3044;&amp;#x5370;&amp;#x8C61;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  10. &amp;#x6271;&amp;#x3044;&amp;#x65B9;&amp;#x6B21;&amp;#x7B2C;&amp;#x3067;&amp;#x30B0;&amp;#x30ED;&amp;#x30FC;&amp;#x30D0;&amp;#x30EB;&amp;#x5909;&amp;#x6570;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3057;&amp;#x307E;&amp;#x3046;&amp;#x3002;\n&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306F;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306E;&amp;#x4E2D;&amp;#x306E;&amp;#x3069;&amp;#x3053;&amp;#x304B;&amp;#x3089;&amp;#x3067;&amp;#x3082;&amp;#x540C;&amp;#x4E00;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x306B;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x304B;&amp;#x3089;&amp;#x3002;\n\n\n
  11. readObject&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x65B0;&amp;#x305F;&amp;#x306B;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30C7;&amp;#x30B7;&amp;#x30EA;&amp;#x30A2;&amp;#x30E9;&amp;#x30A4;&amp;#x30BA;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x7834;&amp;#x7DBB;&amp;#x3059;&amp;#x308B;&amp;#x3093;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n
  12. Java5&amp;#x4EE5;&amp;#x964D;&amp;#x3067;&amp;#x3042;&amp;#x308C;&amp;#x3070;&amp;#x3001;enum&amp;#x306B;&amp;#x4F7F;&amp;#x3048;&amp;#x3070;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306B;&amp;#x3067;&amp;#x304D;&amp;#x3066;&amp;#x3001;&amp;#x5148;&amp;#x307B;&amp;#x3069;&amp;#x306E;&amp;#x30B7;&amp;#x30EA;&amp;#x30A2;&amp;#x30E9;&amp;#x30A4;&amp;#x30BA;&amp;#x304C;&amp;#x7D61;&amp;#x3093;&amp;#x3067;&amp;#x3082;&amp;#x552F;&amp;#x4E00;&amp;#x7121;&amp;#x4E8C;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;&amp;#x4FDD;&amp;#x8A3C;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30B7;&amp;#x30EA;&amp;#x30A2;&amp;#x30E9;&amp;#x30A4;&amp;#x30BA;&amp;#x3092;&amp;#x5FF5;&amp;#x982D;&amp;#x306B;&amp;#x7F6E;&amp;#x304F;&amp;#x306A;&amp;#x3089;enum&amp;#x304C;&amp;#x4E00;&amp;#x756A;&amp;#x5B89;&amp;#x5168;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x5BA3;&amp;#x8A00;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x5B9A;&amp;#x6570;&amp;#x4EE5;&amp;#x5916;&amp;#x306B;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;&amp;#x306A;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x3092;JVM&amp;#x304C;&amp;#x4FDD;&amp;#x8A3C;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nEffiective Java &amp;#x7B2C;&amp;#x4E8C;&amp;#x7248; &amp;#x9805;&amp;#x76EE;77 &amp;#x300C;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x5236;&amp;#x5FA1;&amp;#x306B;&amp;#x5BFE;&amp;#x3057;&amp;#x3066;&amp;#x306F;readResolve&amp;#x3088;&amp;#x308A;enum&amp;#x578B;&amp;#x3092;&amp;#x9078;&amp;#x3076;&amp;#x300D;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  13. &amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;Enum&amp;#x306F;Serializable&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x3066;\n
  14. \n
  15. &amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306E;&amp;#x5178;&amp;#x578B;&amp;#x7684;&amp;#x306A;&amp;#x4F8B;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x6700;&amp;#x521D;&amp;#x306E;getInstance&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3067;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x8907;&amp;#x6570;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3053;&amp;#x306E;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x305F;&amp;#x969B;&amp;#x306B;&amp;#x3001;&amp;#x8907;&amp;#x6570;&amp;#x56DE;&amp;#x306E;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x304C;&amp;#x884C;&amp;#x308F;&amp;#x308C;&amp;#x308B;&amp;#x306E;&amp;#x3092;&amp;#x9632;&amp;#x3050;&amp;#x305F;&amp;#x3081;&amp;#x3068;&amp;#x3001;&amp;#x4ED6;&amp;#x306E;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x306B;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x6E08;&amp;#x307F;&amp;#x3067;&amp;#x3042;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3092;&amp;#x4F1D;&amp;#x3048;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x3001;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x304B;&amp;#x3051;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  16. &amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x306E;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3092;&amp;#x5185;&amp;#x90E8;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x6301;&amp;#x3064;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x30DB;&amp;#x30EB;&amp;#x30C0;&amp;#x30FC;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x30A4;&amp;#x30C7;&amp;#x30AA;&amp;#x30E0;&amp;#x3068;&amp;#x304B;&amp;#x3044;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\ngetInstance&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x304C;&amp;#x521D;&amp;#x3081;&amp;#x3066;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x6642;&amp;#x306B;&amp;#x3001;&amp;#x521D;&amp;#x3081;&amp;#x3066;InstanceHolder.INSTANCE&amp;#x3092;&amp;#x8AAD;&amp;#x307F;&amp;#x51FA;&amp;#x3057;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x306B;&amp;#x3088;&amp;#x308A;InstanceHolder&amp;#x304C;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x30A4;&amp;#x30C7;&amp;#x30AA;&amp;#x30E0;&amp;#x306E;&amp;#x7F8E;&amp;#x3057;&amp;#x3055;&amp;#x306F;&amp;#x3001;getInstance&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x540C;&amp;#x671F;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x304A;&amp;#x3089;&amp;#x305A;&amp;#x3001;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x3060;&amp;#x3051;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3057;&amp;#x305F;&amp;#x304C;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3067;&amp;#x306F;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x306E;&amp;#x30B3;&amp;#x30B9;&amp;#x30C8;&amp;#x304C;&amp;#x5B9F;&amp;#x8CEA;&amp;#x7684;&amp;#x306B;&amp;#x5897;&amp;#x3048;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;\n&amp;#x6700;&amp;#x65B0;&amp;#x306E;JVM&amp;#x306F;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3092;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x3060;&amp;#x3051;&amp;#x306B;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3078;&amp;#x306E;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x3092;&amp;#x540C;&amp;#x671F;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x4E00;&amp;#x65E6;&amp;#x3001;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x304C;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3055;&amp;#x308C;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x305D;&amp;#x306E;&amp;#x5F8C;&amp;#x306E;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3078;&amp;#x306E;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x306B;&amp;#x4F55;&amp;#x3089;&amp;#x304B;&amp;#x306E;&amp;#x691C;&amp;#x67FB;&amp;#x3084;&amp;#x540C;&amp;#x671F;&amp;#x304C;&amp;#x304B;&amp;#x304B;&amp;#x308F;&amp;#x3089;&amp;#x306A;&amp;#x3044;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3001;JVM&amp;#x306F;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x4FEE;&amp;#x6B63;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n
  17. &amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x5168;&amp;#x90E8;&amp;#x8A71;&amp;#x305B;&amp;#x308B;&amp;#x5185;&amp;#x5BB9;&amp;#x3067;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x30C0;&amp;#x30D6;&amp;#x30EB;&amp;#x30C1;&amp;#x30A7;&amp;#x30C3;&amp;#x30AD;&amp;#x30F3;&amp;#x30B0;&amp;#x30ED;&amp;#x30B8;&amp;#x30C3;&amp;#x30AF;&amp;#x306E;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x3002;Java1.4&amp;#x3067;&amp;#x306F;&amp;#x6B63;&amp;#x3057;&amp;#x304F;&amp;#x52D5;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;1.5&amp;#x4EE5;&amp;#x964D;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x306B;&amp;#x3088;&amp;#x308B;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x306E;&amp;#x30B3;&amp;#x30B9;&amp;#x30C8;&amp;#x3092;&amp;#x6E1B;&amp;#x3089;&amp;#x3059;&amp;#x306E;&amp;#x304C;&amp;#x76EE;&amp;#x7684;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x306A;&amp;#x306B;&amp;#x3076;&amp;#x3093;&amp;#x3084;&amp;#x3084;&amp;#x3053;&amp;#x3057;&amp;#x3044;&amp;#x3002;&amp;#x3053;&amp;#x3046;&amp;#x3044;&amp;#x3046;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306F;&amp;#x66F8;&amp;#x304F;&amp;#x3079;&amp;#x304D;&amp;#x3067;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n(1)&amp;#x3067;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x304B;&amp;#x3089;&amp;#x6700;&amp;#x65B0;&amp;#x306E;&amp;#x5024;&amp;#x3092;&amp;#x53D6;&amp;#x5F97;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n(2)&amp;#x3067;&amp;#x306F;valotile&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3092;&amp;#x30C1;&amp;#x30A7;&amp;#x30C3;&amp;#x30AF;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x306E;&amp;#x3067;(3)&amp;#x3067;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3088;&amp;#x308A;&amp;#x30B3;&amp;#x30B9;&amp;#x30C8;&amp;#x304C;&amp;#x4E0B;&amp;#x3055;&amp;#x3052;&amp;#x307E;&amp;#x3059;&amp;#x3002;null&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306F;(3)&amp;#x3067;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3067;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x7372;&amp;#x5F97;&amp;#x3002;\n(3)&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x7372;&amp;#x5F97;&amp;#x5F8C;&amp;#x306F;&amp;#x4ED6;&amp;#x306E;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x30A2;&amp;#x30F3;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x524D;&amp;#x306B;&amp;#x767A;&amp;#x751F;&amp;#x3057;&amp;#x305F;&amp;#x5909;&amp;#x66F4;&amp;#x304C;&amp;#x3001;&amp;#x4E8B;&amp;#x524D;&amp;#x767A;&amp;#x751F;(happens-before)&amp;#x306E;&amp;#x4ED5;&amp;#x69D8;&amp;#x3067;&amp;#x6700;&amp;#x65B0;&amp;#x306E;instance&amp;#x304C;&amp;#x898B;&amp;#x3048;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x4ED6;&amp;#x306E;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x3059;&amp;#x3067;&amp;#x306B;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x6E08;&amp;#x307F;&amp;#x3067;&amp;#x3042;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x89E3;&amp;#x653E;&amp;#x3057;&amp;#x3066;instance&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x3002;&amp;#x672A;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x306A;&amp;#x3089;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3057;&amp;#x3066;instance&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x3002;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x629C;&amp;#x3051;&amp;#x308B;&amp;#x3068;&amp;#x304D;&amp;#x306B;&amp;#x3053;&amp;#x306E;&amp;#x5909;&amp;#x66F4;&amp;#x306F;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x306B;&amp;#x4F1D;&amp;#x308F;&amp;#x308A;&amp;#x3001;&amp;#x4ED6;&amp;#x306E;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x304B;&amp;#x3089;&amp;#x898B;&amp;#x3048;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x30FB;&amp;#x3053;&amp;#x3046;&amp;#x3044;&amp;#x3046;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306F;&amp;#x7406;&amp;#x89E3;&amp;#x304C;&amp;#x96E3;&amp;#x3057;&amp;#x3044;\n&amp;#x30FB;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x306B;&amp;#x95A2;&amp;#x4FC2;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x5384;&amp;#x4ECB;&amp;#x3002;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3060;&amp;#x3051;&amp;#x56DE;&amp;#x907F;&amp;#x3057;&amp;#x305F;&amp;#x307B;&amp;#x3046;&amp;#x304C;&amp;#x3044;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  18. \n
  19. \n
  20. Eager&amp;#x306A;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n