JAVA 원형 모드 상세 설명

6076 단어 JAVA원형 모드
원형 모드
프로 토 타 입 모드(Prototype Pattern)는 중복 되 는 대상 을 만 드 는 동시에 성능 도 보장 합 니 다.이런 유형의 디자인 모델 은 창설 형 모델 에 속 하 는데,이것 은 창설 대상 을 만 드 는 가장 좋 은 방법 을 제공한다.
이 모드 는 현재 대상 의 복 제 를 만 드 는 데 사용 되 는 프로 토 타 입 인 터 페 이 스 를 실현 합 니 다.대상 을 직접 만 드 는 대가 가 비교적 클 때 이런 모델 을 사용한다.예 를 들 어 대상 은 높 은 대가 의 데이터 베 이 스 를 조작 한 후에 만들어 져 야 한다.우 리 는 이 대상 을 캐 시 하여 다음 요청 시 복 제 를 되 돌려 주 고 필요 할 때 데이터 베 이 스 를 업데이트 하여 데이터베이스 호출 을 줄 일 수 있 습 니 다.
소개 하 다.
의도:
프로 토 타 입 인 스 턴 스 로 생 성 대상 의 종 류 를 지정 하고 이 프로 토 타 입 을 복사 하여 새로운 대상 을 만 듭 니 다.
주요 해결:
실행 기간 에 원형 을 만 들 고 삭제 합 니 다.
언제 사용 할 지:
1.시스템 이 제품 의 창설,구성 과 표시 에 독립 해 야 할 때.
2.실례 화 할 클래스 가 실행 시간 에 지 정 될 때,예 를 들 어 동적 으로 불 러 옵 니 다.
3.제품 류 차원 과 평행 하 는 공장 류 차원 을 만 들 지 않도록 한다.
4.하나의 인 스 턴 스 가 몇 개의 서로 다른 상태 조합 중 하나 만 있 을 때.해당 수의 원형 을 만 들 고 복제 하 는 것 이 매번 적당 한 상태 로 수공 으로 예화 하 는 것 보다 더 편리 할 수 있 습 니 다.
어떻게 해결 합 니까?
기 존의 원형 대상 을 이용 하여 원형 대상 과 같은 인 스 턴 스 를 신속하게 생 성 합 니 다.
키 코드:
1.복제 작업 을 실현 하고 JAVA 에서 Cloneable 을 계승 하여 clone()을 다시 작성 하 며.NET 에 서 는 Object 류 의 MemberwiseClone()방법 으로 대상 의 얕 은 복 사 를 실현 하거나 직렬 화 된 방식 으로 깊 은 복 사 를 실현 할 수 있 습 니 다.
2.원형 모델 은 격 리 대상 의 사용자 와 구체 적 인 유형(변 하기 쉬 운 유형)간 의 결합 관 계 를 사용 하 는데 똑 같이 이런'변 하기 쉬 운 유형'이 안정 적 인 인 인 터 페 이 스 를 가 져 야 한다.
인 스 턴 스 적용:
1.세포 분열.
2.JAVA 의 Object clone()방법.
장점:
1.성능 향상.
2.구조 함수 의 제약 을 피한다.
단점:
1.복제 방법 을 배치 하려 면 클래스 의 기능 을 전반적 으로 고려 해 야 한다.이것 은 새로운 클래스 에 대해 어렵 지 않 지만 기 존의 클래스 에 대해 반드시 쉬 운 것 은 아니다.특히 직렬 화 를 지원 하지 않 는 간접 대상 을 인용 하거나 순환 구 조 를 포함 하 는 것 을 인용 할 때.
2.Cloneable 인 터 페 이 스 를 실현 해 야 합 니 다.
사용 필드:
1.자원 최적화 장면.
2.클래스 초기 화 는 매우 많은 자원 을 소화 해 야 하 는데 이 자원 은 데이터,하드웨어 자원 등 을 포함한다.
3.성능 과 안전 이 요구 되 는 장면.
4.new 를 통 해 대상 을 만 들 려 면 매우 번 거 로 운 데이터 준비 나 접근 권한 이 필요 하고 원형 모드 를 사용 할 수 있 습 니 다.
5.한 대상 의 여러 수정 자의 장면.
6.한 대상 이 다른 대상 에 게 접근 해 야 하고 각 호출 자가 그 값 을 수정 해 야 할 때 원형 모드 로 여러 대상 을 복사 하여 호출 자 에 게 사용 하도록 고려 할 수 있다.
7.실제 프로젝트 에서 원형 모델 은 단독 적 으로 나타 나 지 않 고 공장 방법 모델 과 함께 나타 나 며 clone 의 방법 으로 대상 을 만 든 다음 에 공장 방법 으로 호출 자 에 게 제공 합 니 다.원형 모드 는 자바 와 혼연일체 가 되 었 으 니 여러분 이 손 쉽게 사용 하 실 수 있 습 니 다.
주의사항:
하나의 종 류 를 실례 화하 여 새로운 대상 을 구성 하 는 것 과 달리 원형 모델 은 기 존 대상 을 복사 하여 새로운 대상 을 생 성 하 는 것 이다.얕 은 복사 본 은 Cloneable,재 작성,깊 은 복사 본 은 Serializable 을 통 해 바 이 너 리 흐름 을 읽 습 니 다.
이루어지다
우 리 는 추상 적 인 Shape 를 만 들 고 Shape 류 의 실체 류 를 확장 할 것 입 니 다.다음 단 계 는 클래스 ShapeCache 를 정의 합 니 다.이 클래스 는 shape 대상 을 Hashtable 에 저장 하고 요청 할 때 복 제 를 되 돌려 줍 니 다.
Prototype PatternDemo,우리 의 프 리 젠 테 이 션 클래스 는 ShapeCache 클래스 를 사용 하여 Shape 대상 을 가 져 옵 니 다.

단계 1
Cloneable 인 터 페 이 스 를 실현 하 는 추상 적 인 클래스 를 만 듭 니 다.

public abstract class Shape implements Cloneable {
  
  private String id;
  protected String type;
  
  abstract void draw();
  
  public String getType(){
   return type;
  }
  
  public String getId() {
   return id;
  }
  
  public void setId(String id) {
   this.id = id;
  }
  
  public Object clone() {
   Object clone = null;
   try {
     clone = super.clone();
   } catch (CloneNotSupportedException e) {
     e.printStackTrace();
   }
   return clone;
  }
}
단계 2
위의 추상 적 인 클래스 를 확장 하 는 실체 클래스 를 만 듭 니 다.

public class Rectangle extends Shape {
 
  public Rectangle(){
   type = "Rectangle";
  }
 
  @Override
  public void draw() {
   System.out.println("Inside Rectangle::draw() method.");
  }
}

public class Square extends Shape {
 
  public Square(){
   type = "Square";
  }
 
  @Override
  public void draw() {
   System.out.println("Inside Square::draw() method.");
  }
}

public class Circle extends Shape {
 
  public Circle(){
   type = "Circle";
  }
 
  @Override
  public void draw() {
   System.out.println("Inside Circle::draw() method.");
  }
}
단계 3
데이터베이스 에서 실체 클래스 를 가 져 와 Hashtable 에 저장 하 는 클래스 를 만 듭 니 다.

import java.util.Hashtable;
 
public class ShapeCache {
  
  private static Hashtable<String, Shape> shapeMap 
   = new Hashtable<String, Shape>();
 
  public static Shape getShape(String shapeId) {
   Shape cachedShape = shapeMap.get(shapeId);
   return (Shape) cachedShape.clone();
  }
 
  //              ,      
  // shapeMap.put(shapeKey, shape);
  //   ,         
  public static void loadCache() {
   Circle circle = new Circle();
   circle.setId("1");
   shapeMap.put(circle.getId(),circle);
 
   Square square = new Square();
   square.setId("2");
   shapeMap.put(square.getId(),square);
 
   Rectangle rectangle = new Rectangle();
   rectangle.setId("3");
   shapeMap.put(rectangle.getId(),rectangle);
  }
}
단계 4
Prototype PatternDemo 는 ShapeCache 류 를 사용 하여 Hashtable 에 저 장 된 모양 의 복 제 를 가 져 옵 니 다.

public class PrototypePatternDemo {
  public static void main(String[] args) {
   ShapeCache.loadCache();
 
   Shape clonedShape = (Shape) ShapeCache.getShape("1");
   System.out.println("Shape : " + clonedShape.getType());    
 
   Shape clonedShape2 = (Shape) ShapeCache.getShape("2");
   System.out.println("Shape : " + clonedShape2.getType());    
 
   Shape clonedShape3 = (Shape) ShapeCache.getShape("3");
   System.out.println("Shape : " + clonedShape3.getType());    
  }
}
단계 5
실행 프로그램,출력 결과:
Shape : Circle
Shape : Square
Shape : Rectangle
이상 은 JAVA 원형 모델 에 대한 상세 한 내용 입 니 다.JAVA 원형 모델 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

좋은 웹페이지 즐겨찾기