java 원형 디자인 모드
3989 단어 디자인 모드
그것 의 장면 은 같은 대상 을 여러 번 자주 만 드 는 데 있다.
원형 디자인 모델 은 깊 은 복사 와 얕 은 복사 지식 을 사용한다. 깊 은 복사 와 얕 은 복사 가 무엇 인지 모 르 면 자 료 를 찾 아 보 세 요.여기 서 는 말 하지 않 겠 습 니 다.저 는 면접 을 봐 야 합 니 다.시간 이 없습니다.
public class Order implements Cloneable{
private String name;
private int id;
private double money;
public Order(String name, int id, double money) {
this.name = name;
this.id = id;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
protected Order clone() throws CloneNotSupportedException {
return (Order) super.clone();
}
@Override
public String toString() {
return "Order{" +
"name='" + name + '\'' +
", id=" + id +
", money=" + money +
'}';
}
}
위의 Order 에 서 는 인용 유형 변 수 를 사용 하지 않 았 기 때문에 얕 은 복사 본 을 사 용 했 습 니 다.있 으 면 깊 은 복사 본 을 사용 하 는 것 이 좋 습 니 다.왜 냐 면 얕 은 복사 와 깊 은 복사 가 무엇 인지 스스로 알 아 보 는 것 이 좋 습 니 다.그들의 차이 점 은 어디 에 있 습 니까?
테스트 클래스
public class Client {
public static void main(String[] args) {
Order order = new Order("iphone ",1,5000);
for(int i=0;i<100;i++){
try {
Order cloneOrder = order.clone();
System.out.println("cloneOrder="+cloneOrder);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
}
갑자기 생각 났 는데,창설 대상 은 네 가지 방식 이 있 는데 그것 이 바로 뉴 클론 이다 서열 화 와 반 서열 화 반사
클론 파괴 단일 디자인 모드
public class Singleton implements Cloneable {
private String name;
private int id;
private Singleton(){}
private static class Holder{
private static final Singleton holder = new Singleton();
}
public static Singleton getInstance(){
return Holder.holder;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
테스트 클래스
public class Test {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
try {
Method method = singleton.getClass().getDeclaredMethod("clone");
method.setAccessible(true);
Singleton cloneSingleton = (Singleton) method.invoke(singleton,null);
System.out.println(" :"+singleton);
System.out.println(" :"+cloneSingleton);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
log:
:com.kd.principle.protoType.Singleton@511d50c0
:com.kd.principle.protoType.Singleton@60e53b93
복 제 된 대상 과 원시 대상 이 하나의 대상 이 아니 라 는 것 을 발견 하면 단일 모델 의 정의 에 어 긋 나 복제 가 단일 모델 을 파괴 하 는 것 을 방지 할 수 있다.
첫째:Cloneable 인 터 페 이 스 를 실현 하지 마 세 요.
두 번 째:만약 에 Cloneable 인 터 페 이 스 를 실현 하려 면 clone 방법 은
@Override
protected Object clone() throws CloneNotSupportedException {
return Holder.singleton;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.