디자인 모델 의 원형 모델, 구축 자 모델

5. 원형 모드 (면접)
소개 하 다.
원형 모델 은 창설 형 모델 이지 만 공장 모델 과 관계 가 없다. 이름 을 보면 알 수 있 듯 이 이 모델 의 사상 은 하나의 대상 을 원형 으로 삼 아 복제, 복제 하여 원래 의 대상 과 유사 한 새로운 대상 을 만 드 는 것 이다.
예시
  • 먼저 원형 류 를 만 듭 니 다
  •  public class Prototype implements Cloneable {
         public Object clone() throws CloneNotSupportedException {
             Prototype proto = (Prototype) super.clone();
             return proto;
        }
     }

    간단 합 니 다. 하나의 원형 류 는 Cloneable 인터페이스 만 실현 하고 clone 방법 을 복사 해 야 합 니 다. 여기 서 clone 방법 은 임의의 이름 으로 바 꿀 수 있 습 니 다. Cloneable 인 터 페 이 스 는 빈 인터페이스 이기 때문에 clonea 나 cloneB 와 같은 방법 명 을 임의로 정의 할 수 있 습 니 다. 여기 서 중점 은 슈퍼. clone () 이라는 말, 슈퍼. clone () 이 호출 하 는 Object 의 clone () 방법 이기 때 문 입 니 다.그리고 Object 류 에서 clone () 은 native 이 고 구체 적 으로 어떻게 실현 하 는 지 더 이상 깊이 연구 하지 않 습 니 다.
    여기 서 저 는 대상 의 얕 은 복제 와 깊 은 복 제 를 결합 하여 먼저 대상 의 깊 고 얕 은 복제 개념 을 알 아야 합 니 다.
  • 얕 은 복사: 한 대상 을 복사 하면 기본 데이터 형식의 변 수 는 다시 만 들 고 인용 유형 은 원래 대상 이 가리 키 는 것 입 니 다.
  • 딥 복사: 한 대상 을 복사 한 후에 기본 데이터 형식 이 든 인용 유형 이 든 모두 재 구축 한 것 이다. 쉽게 말 하면 딥 복 제 는 완전히 철저하게 복 제 했 고 얕 은 복 제 는 철저 하지 않다
  • .
  • 깊이 복사 예 를 쓴다
  •  public class Prototype implements Cloneable, Serializable {
         private static final long serialVersionUID = 1L;
         private String string;
         private SerializableObject obj;
    
         //    
         public Object clone() throws CloneNotSupportedException {
             Prototype proto = (Prototype) super.clone();
             return proto;
        }
    
         //    
         public Object deepClone() throws IOException, ClassNotFoundException {
             //            
             ByteArrayOutputStream bos = new ByteArrayOutputStream();
             ObjectOutputStream oos = new ObjectOutputStream(bos);
             oos.writeObject(this);
             //             
             ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
             ObjectInputStream ois = new ObjectInputStream(bis);
             return ois.readObject();
        }
    
         public String getString() {
             return string;
        }
         public void setString(String string) {
             this.string = string;
        }
         public SerializableObject getObj() {
             return obj;
        }
         public void setObject(SerializableObject obj) {
             this.obj = obj;
        }
    
     }
    
     class SerializableObject implements Serializable {
         private static final long serialVersionUID = 1L;
    
     }

    6. 빌 더 모드
    소개 하 다.
    건설 자 모델 의 정 의 는 복잡 한 대상 의 구 조 를 그의 표현 과 분리 시 켜 같은 구축 과정 에서 서로 다른 표현 을 만 들 수 있 도록 하 는 것 이다. 이런 디자인 모델 은 건설 자 모델 이 라 고 불 린 다.
    건설 자 모델 의 역할 정 의 는 건설 자 모델 에 다음 과 같은 4 개의 역할 이 존재 한다.
  • builder: 제품 대상 을 만 들 기 위 한 위 젯 별로 추상 적 인 인터페이스 지정
  • ConcreteBuilder: Builder 의 인 터 페 이 스 를 실현 하여 이 제품 의 각 부품 을 구조 하고 조립 하여 만 든 표 시 를 정의 하고 명 확 히 하 며 검색 제품 의 인 터 페 이 스 를 제공 합 니 다.
  • Director: Builder 인 터 페 이 스 를 사용 하 는 대상 구축
  • Product: 구 조 된 복잡 한 대상 을 나타 내 고 ConcreteBuilder 는 이 제품 의 내부 표시 와 재배 치 과정 을 정의 하 며 구성 부품 의 종 류 를 정의 합 니 다. 이 부품 들 을 최종 제품 의 인터페이스 로 조립 하 는 것 을 포함 합 니 다
  • 공장 모델 과 구축 모델 의 차이
    구축 자 모델 과 공장 모델 은 매우 유사 하 다. 차이 점 은 구축 자 모델 은 개성 제품 의 구축 이 고 공장 모델 은 표준화 된 제품 의 구축 이다.
  • 감독 류: 일정한 순서 또는 일정한 수요 에 따라 한 제품 을 조립 한다
  • 구조 자 류: 제품 에 대한 서로 다른 맞 춤 형 제작 을 제공 하고 최종 적 으로 제품
  • 을 만 듭 니 다.
  • 제품 종류: 최종 제품
  • 예시
  • 구축 자
  •  //    
     public class StudentBuilder {
         //        
         private Student student = new Student();
    
         public StudentBuilder id(int id) {
             student.setId(id);
             return this;
        }
         public StudentBuilder name(String name) {
             student.setName(name);
             return this;
        }
         public StudentBuilder age(int age) {
             student.setAge(age);
             return age;
        }
         public StudentBuilder father(String fatherName) {
             Father father = new Father();
             father.setName(fatherName);
             student.setFather(father);
             return this;
        }
         //     
         public Student build() {
             return student;
        }
    
     }
    
  • 감독 류
  •  //    /    
     public class BuildDemo {
         public static void main(String[] args) {
             StudentBuilder builder = new StudentBuilder();
             //       Student
             Student student = builder.age(1).name("zhangsan").father("zhaosi").build();
             System.out.println(student);
        }
     }
    

    이야기 링 내일 닭 다리 추가 가능!좋아 하 다

    좋은 웹페이지 즐겨찾기