설립자 모델 - 추상 공장

3421 단어 디자인 모드
  • 추상 공장
  • 구축 자
  • 공장 방법
  • 원형
  • 단 례
  • 추상 공장
    정의: 공장 방법 이상 의 인 터 페 이 스 를 제공 합 니 다. 주로 하나 이상 의 공장 으로 돌아 가 는 데 사 용 됩 니 다.
    장점 및 사용:
  • 관련 되 거나 무관 한 대상 그룹 만 들 기
  • 제품 화 된 라 이브 러 리 를 제공 하고 인터페이스 만 노출
  • 실현 류 는 초 류
  • 에 독립 해 야 한다.
  • 시스템 은 제품 생 성에 독립 되 어 표시
  • 어떤 구속 을 강제 하려 고 시도
  • 플랫폼 특징 을 숨 기 는 선택
  • 시스템 의 확장 이 용이 함
  • 관련 모델 은 다음 과 같다.
  •       공장 방법: 이것 은 항상 추상 적 인 공장 실현 이다.
          단일 예: 이것 은 항상 추상 적 인 공장 실현 이다.
          원형: 이것 은 항상 추상 적 인 공장 실현 이다.
          외관: 이것 은 추상 적 인 공장 에 자주 사용 되 고 실현 류 를 만 드 는 인 터 페 이 스 를 제공 합 니 다.
    예:
    만약 에 프로그램 을 써 서 서로 다른 지역 의 데 이 터 를 표시 해 야 한다 고 가정 합 니 다. 예 를 들 어 원 격 또는 로 컬 에서 온 것 은 데 이 터 를 얻 기 전에 데이터 베 이 스 를 연결 해 야 합 니 다. 그러면 두 가지 선택 이 있 습 니 다. 로 컬 또는 원 격 입 니 다. 추상 적 인 프로젝트 모델 로 인 터 페 이 스 를 설정 할 수 있 습 니 다.
    
    class DataInfo{}
    interface Local {
       DataInfo[] loadDB(String fileName);
    }
    
    interface Remote extends Local{
       void connect2WWW(String url);
    }
    
    class LocalMode implements Local{
        public DateInfo[] loadDB(String name) {
          System.out.print("Load from a local dataBase");
          return null;
     }
    }
    
    class RemoteMode implements Remote {
      public void connect2WWW(String url) {
        System.out.println("Connect to a remote site ");
      }
      public DataInfo[] loadDB(String name) {
         System.out.println("Load from a remote database ");
         return null;
      }
    }
    
    //     
    interface ConnectionFactory {
      Local getLocalConnection();
      Remote getRemoteConnection();
    }
    
    //      
    class DataManager implements ConnectionFactory {
        boolean local = false;
        DataInfo[] data;
        //...
        public Local getLocalConnection() {
            return new LocalMode();
        }
        public Remote getRemoteConnection() {
            return new RemoteMode();
        }
        public  void loadData() {
             if(local){
                Local conn = getLocalConnection();
                data = conn.loadDB("db.db");
             }else {
                Remote conn = getRemoteConnection();
                conn.connect2WWW("www.some.where.com");
                data = conn.loadDB("db.db");
             }
             
         }
    	 // work on data 
       
        public void setConnection(boolean b) {
           local = b;
        }
    }
    
    //    
    class Test {
        public static void main(String[] args) {
            DataManager dm = new DataManager();
            DataInfo[] di = null;
            String dbFileName = "db.db";
            if (args.length == 1) {
                //  local  true
    	    dm.setConnection(true);
                LocalMode lm = (LocalMode)dm.getLocalConnection(); 
    	    di = lm.loadDB(dbFileName); 
            } else {  
               //  : dm.local = false      
               RemoteMode rm = (RemoteMode)dm.getRemoteConnection();
               rm.connect2WWW("www.javacamp.org/db/");
               di = rm.loadDB(dbFileName); 
            }
            //               
            //                    .
            //  di.find(), di.search() etc.
        }
    }
    
    

    좋은 웹페이지 즐겨찾기