JAVASE 단일 설계 모델에 대한 간단한 설명

간단하게 말하면 디자인 모델은 사실 문제에 대한 효과적인 해결 방식이다.사실 그것은 일종의 사상이다.
1. 단례 디자인 모델.
해결 문제: 메모리에 있는 대상의 유일성을 보증할 수 있다.(단일 인스턴스)
단일 디자인 모델 사용 수요: 여러 프로그램이 같은 설정 정보 대상을 사용해야 할 때 이 대상의 유일성을 확보해야 한다.
어떻게 대상의 유일성을 보증합니까?해결 단계:
      1.다른 프로그램이 new로 이 대상을 만드는 것을 허용하지 않습니다.                                            1.이런 구조 함수를 사유화하다.
      2.이 클래스에서 이 클래스의 실례를 만듭니다.                                                         2.new를 통해 이 클래스에서 이 클래스의 대상을 만듭니다.
      3.다른 프로그램이 이 대상을 얻을 수 있도록 대외적으로 방법을 제공한다.                            3.만든 대상을 되돌려주는 공유 방법을 정의합니다.

// ( )
class Single// , 。
{
  private static Single s = new Single();
 
  private Single(){}
 
  public static Single getInstance()
  {
    return s;
  }
}
 
 

// ( , , !)
class Single2// , , getInstance , 。
      // 。 
{
  private static Single2 s = null;
 
  private Single2(){}
 
  public static Single2 getInstance()
  {
    if(s==null)
      s = new Single2();
    return s;
  }
}
 
// 
class SingleDemo
{
  public static void main(String[] args) 
  {
    Single s1 = Single.getInstance();
    Single s2 = Single.getInstance();
 
    System.out.println(s1==s2);
     
//   Single ss = Single.s; // ,  Single.getInstance(); 。
 
  }
}
굶주림식 단례류는 자신이 탑재될 때 자신을 실례화한다.설령 캐리어가 정적이라 하더라도, 굶주린 한식 단례류가 탑재될 때, 여전히 자신을 실례화할 것이다.단지 자원 이용 효율의 측면에서 볼 때, 이것은 게으름뱅이식 단례류보다 약간 떨어진다.속도와 반응 시간의 측면에서 보면 게으름뱅이식 단례류보다 조금 낫다.
3. 등록식:
코드:

package pattern.singleton;import java.util.HashMap;import java.util.Map;
 // .
 // Spring , , 。
public class Singleton3 {
 private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
 static{
 Singleton3 single = new Singleton3();
 map.put(single.getClass().getName(), single);
 }
 // 
protected Singleton3(){}
 // , 
public static Singleton3 getInstance(String name) {
 if(name == null) {
 name = Singleton3.class.getName();
 System.out.println("name == null"+"--->name="+name);
 }
 if(map.get(name) == null) {
 try {
 map.put(name, (Singleton3) Class.forName(name).newInstance());
 } catch (InstantiationException e) {
 e.printStackTrace();
 } catch (IllegalAccessException e) {
 e.printStackTrace();
 } catch (ClassNotFoundException e) {
 e.printStackTrace();
 }
 }
 return map.get(name);
 }
 // 
public String about() {
 return "Hello, I am RegSingleton.";
 }
 public static void main(String[] args) {
 Singleton3 single3 = Singleton3.getInstance(null);
 System.out.println(single3.about());
 }
 }

좋은 웹페이지 즐겨찾기