다섯 가지 단일 모델 의 안전성 문제
3261 단어 디자인 모드
이 5 가지 단일 모델 중에서 매 거 진 것 이 가장 특수 하 다. 정부 가 제공 하 는 모델 이기 때문에 풀 리 지 않 고 매우 안전 하 다.
나머지 4 가지 중에서 우 리 는 게으름뱅이 식 을 예 로 들 어 안전 문 제 를 말한다.
정상 호출 코드:
public class Client {
public static void main(String[] args) {
Husband01 s011 = Husband01.getWife();
Husband01 s012 = Husband01.getWife();
System.out.println(s011);
System.out.println(s012);
System.out.println(s011 == s012);
}
}
출력 결과
Husband01@c3c749
Husband01@c3c749
true
다음은 반사 로 단일 모드 를 해독 합 니 다.
import java.lang.reflect.Constructor;
public class Client {
public static void main(String[] args) throws Exception {
Husband01 s011 = Husband01.getWife();
Husband01 s012 = Husband01.getWife();
//
Class h1 = (Class) Class.forName("Husband01");// H1
Constructor c = h1.getDeclaredConstructor(null);//
c.setAccessible(true);//
Husband01 s013 = (Husband01) c.newInstance(null);//
System.out.println(s011);
System.out.println(s012);
System.out.println(s013);
System.out.println(s011 == s012);
System.out.println(s011 == s013);
}
}
출력 결과
Husband01@1bc4459
Husband01@1bc4459
Husband01@12b6651
true
false
다른
직렬 화 해독 (Serializable 구현) 단일 모드:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Client {
public static void main(String[] args) throws Exception {
Husband01 s011 = Husband01.getWife();
Husband01 s012 = Husband01.getWife();
//
FileOutputStream fos = new FileOutputStream("d:/a.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(s011);
fos.close();
oos.close();
FileInputStream fis = new FileInputStream("d:/a.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Husband01 s013 = (Husband01) ois.readObject();
fis.close();
ois.close();
System.out.println(s011);
System.out.println(s012);
System.out.println(s013);
System.out.println(s011 == s012);
System.out.println(s011 == s013);
}
}
출력 결과
Husband01@13bad12
Husband01@13bad12
Husband01@1a626f
true
false
우 리 는 이제 알 았 다. 풀 면 피 할 수 있다 면?
코드 는 이렇게 써 야 돼!
import java.io.ObjectStreamException;
import java.io.Serializable;
/**
* : , ( )
*/
public class Husband01 implements Serializable{
// ,
private static Husband01 wife = null;
// ,
private Husband01(){
if(wife != null){//
throw new RuntimeException();
}
}
//
public static synchronized Husband01 getWife(){// synchronized
if(wife == null){
wife = new Husband01();// !
}
return wife;
}
//
private Object readResolve() throws ObjectStreamException {
return wife;
}
}
이렇게 하면 우 리 는 풀 리 는 것 을 피 할 수 있 습 니까?그렇다면 다섯 가지 디자인 모델 의 효율 은 어 떨 까?5 가지 단일 모델 의 효율 문 제 를 보 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.