디자인 모델 (2) - 추상 공장 및 진화 의 길

저작권 선언:
본 고 는 블 로 거들 이 창작 한 글 이 므 로 전재 가 필요 하 다 면 출처 를 밝 혀 주 십시오 (https://blog.csdn.net/F1004145107/article/details/99861531)
  • / 선언 /       이 글 에 도착 하면 저 는 더 많은 마음 과 편폭 으로 진화 하 는 길에 있 을 것 입 니 다. 왜냐하면 저 는 생각 이 고정된 모델 보다 중요 하 다 고 생각 하기 때문에 말 을 많이 하지 않 고 바로 시작 하 겠 습 니 다
  • / 1 / 추상 적 인 공장 모델 을 왜 사용 합 니까?       공장 방법 모델 이 있 는 전제 에서 추상 적 인 공장 이 파생 된 이상 특정한 문 제 를 해결 하 는 데 사용 된다 는 것 을 설명 한다. 앞의 포장 디자인 모델 (1) - 간단 한 공장 과 공장 방법 을 통 해 우 리 는 간단 한 공장 이 무엇 인지, 그리고 공장 방법 이 무엇 인지 알 게 되 었 다. 지난 글 에서 우 리 는 공장 방법의 부족 을 말 했다.시리즈 제품 을 생산 해 야 하 는 문 제 를 간단하게 해결 할 수 없다. 추상 적 인 공장 이 발 명 된 것 은 바로 이 문 제 를 해결 하 는 데 쓰 인 다
  • .
  • / 2 / 추상 공장 모델 어떻게 사용       시리즈 제품 은 무엇 입 니까? 한 브랜드 에서 서로 다른 모델 의 제품 입 니 다. 예 를 들 어 우 리 는 모두 기계 키 보드 를 좋아 하지만 기계 키보드 도 서로 다른 디자인 을 가지 고 있 습 니 다. 예 를 들 어 체 리 (Cherry) 의 87 키 키보드 와 104 키 키보드 등 입 니 다.       지면 에 제한 을 받 아 우 리 는 지난 글 의 일부 코드 를 삭제 하고 추상 류 를 인터페이스 로 바 꾸 었 다. 그러나 예 는 같은 예 이다. 더 말 하지 않 고 코드 에 직접 올 라 가 보 자.       제품 의 모든 코드       두 제품 인터페이스: KeyBoard87, KeyBoard104       구체 적 인 제품 실현 유형: Razer87, Cherry87, Razer104, Cherry104
    //87     
    public interface KeyBoard87 {
        void introduce87();
    }
    //  87   
    public class Razer87 implements KeyBoard87 {
        @Override
        public void introduce87() { System.out.println("  87   "); }
    }
    //  87   
    public class Cherry87 implements KeyBoard87 {
        @Override
        public void introduce87() { System.out.println("  87   "); }
    }
    ​
    //104     
    public interface KeyBoard104 {
        void introduce104();
    }
    //  104   
    public class Razer104 implements KeyBoard104 {
        @Override
        public void introduce104() { System.out.println("  104   "); }
    }
    //  104   
    public class Cherry104 implements KeyBoard104 {
        @Override
        public void introduce104() { System.out.println("  104   "); }
    }
           공장 의 모든 코드, 여 기 는 공장 방법 과 가장 큰 차이 점 입 니 다. 한 공장 에서 여러 가지 같은 계열 의 제품 을 생산 합 니 다.       한 공장 의 인터페이스: KeyBoardFactory       구체 적 인 공장 의 실현 유형: RazerFactory, CherryFactory
    //     :        
    public interface KeyBoardFactory {
        KeyBoard87 createKeyBoard87();
    ​
        KeyBoard104 createKeyBoard104();
    }
    //       :    87  104   
    public class RazerFactory implements KeyBoardFactory {
        //    87   
        @Override
        public KeyBoard87 createKeyBoard87() { return new Razer87(); }
    ​
        //    104   
        @Override
        public KeyBoard104 createKeyBoard104() { return new Razer104(); 
    }
      
    //       :    87  104   
    public class CherryFactory implements KeyBoardFactory {
        //    87   
        @Override
        public KeyBoard87 createKeyBoard87() { return new Cherry87(); }
        
        //    104   
        @Override
        public KeyBoard104 createKeyBoard104() { return new Cherry104(); }
    
           테스트 코드
    public class Demo {
    ​
        public static void main(String[] args) {
            //  Razer87 
            RazerFactory razerFactory = new RazerFactory();
            KeyBoard87 keyBoard87 = razerFactory.createKeyBoard87();
            keyBoard87.introduce87();
            //  Razer104 
            KeyBoard104 keyBoard104 = razerFactory.createKeyBoard104();
            keyBoard104.introduce104();
            //  Cherry87 
            CherryFactory cherryFactory = new CherryFactory();
            keyBoard87 = cherryFactory.createKeyBoard87();
            keyBoard87.introduce87();
            //  Cherry104 
            keyBoard104 = cherryFactory.createKeyBoard104();
            keyBoard104.introduce104();
        }
    }
           출력 결과
    뇌 사 87 키 건반
    뇌 사 104 키 건반
    앵두 87 키 키보드
    앵두 104 키 키보드
           추상 적 인 공장 의 사고방식 을 살 펴 보 자.           1. 우 리 는 뇌 사 87 키 와 체 리 87 키 가 모두 공 통 된 특성 을 가지 고 있다 는 것 을 발견 했다. 그것 이 바로 87 의 키보드 이다. 그러면 우 리 는 이 특성 을 하나의 인터페이스 로 추상 화하 고 구체 적 인 제품 으로 하여 금 이 인터페이스 와 특성 을 실현 하 게 한다.           2. 공장 방법 모델 에 따라 우리 가 정의 해 야 할 것 은 레이 사 87 공장 과 레이 사 104 공장 이다. 그러나 우 리 는 그들 이 모두 레이 사 계열 의 제품 이라는 공통점 을 발견 했다. 그러면 우 리 는 이 특성 을 새로운 공장 레이 사 공장 으로 추상 화 할 것 이다.           3. 뇌 사 공장 이 추상 화 되 었 으 니 우 리 는 왜 뇌 사 87 과 104 의 생산 을 모두 뇌 사 공장 에 두 지 않 았 을 까? 따로 공장 을 세 울 필요 가 없다.           4. 호출 시 우 리 는 이 브랜드 공장 을 설립 하 는 대상 만 있 으 면 이 브랜드 의 모든 제품 을 생산 할 수 있다.       우리 가 추상 적 인 공장 을 언제 사용 하 는 지 에 대해 서 는 모두 가 분명 해 야 한다. 상기 장면 이 나타 나 면 추상 적 인 공장 을 주저 하지 않 고 사용 해 야 한다. 간단 한 공장 → 공장 방법 → 추상 적 인 공장 을 통 해 한 걸음 한 걸음
  • / 3 / 진화 의 길       마침내 이 부분 에 왔 습 니 다. 여기 서 저 는 공장 방법의 진화 의 길 을 설명 할 뿐만 아니 라 구조 에 대한 제 생각 도 표현 해 야 합 니 다. 여러분 께 여러 각도 의 견 해 를 제공 해 드 리 고 싶 습 니 다. 저 는 가능 한 한 명확 하 게 쓰 겠 습 니 다.       우 리 는 먼저 공장 의 진화 의 길 을 살 펴 보 겠 다. 나 는 이전의 사례 의 코드 를 대량으로 삭제 하고 구 조 를 남 겨 서 모든 공장 의 서로 다른 간단 한 공장
    //  
    public class Keyboard {}
    ​
    //  
    public class SimpleFactory {
        public static Keyboard getKeyboard (String name) {}
    }
    추상 적 인 공장 을 나타 낸다. 
    //    
    public interface Keyboard {}
    ​
    //     
    public class Cherry extends Keyboard{}
    public class Razer extends Keyboard {}
    ​
    //      
    public interface KeyboardFactory {}
    ​
    //       
    public class CherryFactory implements KeyboardFactory{}
    public class RazerFactory implements KeyboardFactory{}
    공장 방법 
    //87       
    public interface KeyBoard87 {}
    //   87        
    public class Razer87 implements KeyBoard87 {}
    public class Cherry87 implements KeyBoard87 {}
    ​
    //104       
    public interface KeyBoard104 {}
    //   104        
    public class Razer104 implements KeyBoard104 {}
    public class Cherry104 implements KeyBoard104 {}
    ​
    //     ,        
    public interface KeyBoardFactory {
        KeyBoard87 createKeyBoard87();
        KeyBoard104 createKeyBoard104();
    }
    //           
    public class RazerFactory implements KeyBoardFactory {
        //  87   
        @Override
        public KeyBoard87 createKeyBoard87() { return new Razer87(); }
        //  104   
        @Override
        public KeyBoard104 createKeyBoard104() { return new Razer104(); 
    }  
    public class CherryFactory implements KeyBoardFactory {
        @Override
        public KeyBoard87 createKeyBoard87() { return new Cherry87(); }
        @Override
        public KeyBoard104 createKeyBoard104() { return new Cherry104(); }
    }
           내 가 보기에 하나의 구조 가 가장 중요 한 것 은 그의 건장 성과 확장 성 이다. 그 중에서 건장 성 이 가장 앞 에 있다. 만약 에 당신 의 디자인 이 사용자 로 하여 금 매우 편리 하 게 확장 할 수 있 지만 내부 의 구 조 를 파괴 할 수 있다 면 이 디자인 은 반드시 실패 할 것 이다. 왜냐하면 당신 의 디자인 은 최종 적 으로 온라인 플랫폼 에 배 치 될 것 이 고 온라인 플랫폼 은 파괴 되 는 것 을 허락 하지 않 기 때문이다.       로 마 는 하루 에 완 성 된 것 이 아니 라 완 선 된 시스템 도 개발 초기 에 디자인 된 것 이 아니다. 우 리 는 후기 에 끊임없이 최적화 되 고 교체 되 어 우리 의 시스템 을 보완 해 야 한다. 시스템 이 일정한 규모 로 발전 할 때 우 리 는 중요 한 기능 을 추출 하여 하나의 구성 요 소 를 형성 해 야 한다. 우리 가 모든 구성 요 소 를 한데 모 을 때 바로 우리 의 시스템 이다.저 는 디자인 할 때 이 구성 요 소 를 '대중' 에 게 어떻게 사용 할 수 있 는 지 생각 하 는 습관 이 있 습 니 다. 여기 서 대중 은 현재 와 미래의 동 료 를 말 합 니 다. 그들 이 현재 업무 장면 에 따라 그들 이 필요 로 하 는 것 을 신속하게 맞 출 수 있 도록 하 는 방법 입 니 다. 여기 서 우 리 는 충분 한 우수한 구 조 를 설계 하여 구성 요소 의 신속 한 확장 을 지탱 해 야 합 니 다.       공장 방법 → 추상 공장 에 대해 우리 가 위 에서 말 한 것 은 이미 매우 명확 하 다. 그러나 위 에서 중점 을 두 지 않 은 것 은 추상 이다. 구조의 진화 의 길 은 서 천 에서 경 로 를 얻 는 길 과 같다. 우 리 는 우리 의 목표 (서 천) 를 명 확 히 알 아야 한다. 중간 에 여러 가지 방식 으로 우리 의 목표 (법보) 를 달성 해 야 한다.내 가 보기에 추상 은 구조 진 화 를 추진 하 는 중요 한 보물 이다.       여러분 들 이 위의 구조 코드 를 통 해 간단 한 공장 → 공장 방법의 진 화 는 바로 서로 다른 제품 을 서로 다른 공장 에 두 고 생산 하 는 것 이 라 고 믿 습 니 다. 우리 가 사용 하 는 방법 은 추상 적 이 고 공 통 된 특성 을 추출 하여 기준 을 형성 하 는 것 입 니 다.우 리 는 제품 의 생산 을 분 리 했 지만 모든 공장 과 제품 이 우리 의 요구 에 부합 하도록 기준 을 제정 해 야 한다
  • .
  • / 4 / 결어       공장 모델 은 매우 의미 있 는 모델 로 간단 하고 효율 적 이 며 사용률 이 높 아서 디자인 모델 의 입문 에 매우 적합 하 다. 여러분 들 이 공장 모델 의 진 화 를 완전히 소화 할 수 있 기 를 바 랍 니 다. 저 는 개인 적 으로 이것 이 비교적 의미 가 있다 고 생각 합 니 다. 전체 디자인 모델 체계 에서 공장 모델 만 진화 하 는 과정 을 나 타 낼 수 있 습 니 다.       우리 가 디자인 모델 을 사용 하 는 것 은 사용 하기 위해 서가 아니 라 우리 의 개발 을 편리 하 게 하기 위해 서 이다.       공장 모드 는 여기 서 마 치 겠 습 니 다 ~
  • 좋은 웹페이지 즐겨찾기