자바 정적 공장 모드 사용

4887 단어 자바
관련 글 은 참고 하 시기 바 랍 니 다.http://www.enjoytoday.cn/categorys/java
정적 공장 모델 이 사람 에 게 주 는 첫 인상 은 바로 static + abstract 이다. 이 두 단 어 는 이미 모든 것 을 설명 했다. 하 나 는 주기 가 길 고 하 나 는 반환 값 이 추상 적 이 며 추상 은 자바 심지어 프로 그래 밍 에서 인기 있 는 단어 이다.그러나 이런 실현 은 만능 이 아니 라 맹목적 으로 사용 해 서 는 안 되 며 현실 장면 과 결합 해 야 한다.정적 방식 으로 실 현 된 장면 에 대해 다음 과 같이 요약 한다.
  • 방문 빈도 가 비교적 높 고 빈도 가 높 은 방문 은 이 방식 을 통 해 매번 재 구축 대상 의 원 가 를 효과적으로 줄 일 수 있다
  • .
  • 구조 화 된 인터페이스 도구 류 는 기능 이 비슷 하고 코드 재 활용 이 비교적 높 은 도구 류 작업 은 인 터 페 이 스 를 바탕 으로 하 는 프레임 워 크 의 실현 방식 을 통 해 대량의 코드 실현 을 간소화 할 수 있 으 며 정태 적 인 호출 방법 이름 을 통 해 대상 을 직관 적 으로 얻 을 수 있다. 이런 유형 은 조작 성 이 많다
  • .
  • 단일 모델 의 두 가지 선택 사례 가 실 현 된 원인 도 사실은 이와 유사 하 다.
  • 서비스 제공 자 프레임 워 크 의 실현 은 먼저 서비스 제공 자 프레임 워 크 에 대해 간단하게 알 아야 한다. 서비스 제공 자 프레임 워 크 는 네 가지 구성 부분 을 포함한다. 1) 서비스 인터페이스: 서비스 제공 자 실현 부분 2) 제공 자 등록 API: 클 라 이언 트 가 서비스 시스템 을 등록 하 는 데 사용 되 는 3) 서비스 방문 API: 클 라 이언 트 가 서비스 인 스 턴 스 를 얻 는 4) 서비스 제공 자 인터페이스 (선택 가능): 공급 자 는 서 비 스 를 만 들 고 사례 의 전형 적 인 사례 jdbc 의 실현 을 실현 하 는 것 을 책임 집 니 다.
     try{
            Class.forName("com.mysql.jdbc.Driver");//        
            Connection conn = DriverManager.getConnection(url, user, password);//      
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    
    상기 와 같이 Connection 은 서비스 인터페이스 로 sql 연결 서 비 스 를 제공 합 니 다.Class. forName ("com. mysql. jdbc. Driver") 은 공급 자 등록 API 입 니 다."DriverManager. getConnection 은 서비스 액세스 API 입 니 다."com. mysql. jdbc. Driver '라 는 종류 가 바로 서비스 제공 자 인터페이스 입 니 다.
  • 간단 한 정적 공장 코드 를 보 여 줍 니 다.
    public interface Service{
        void startService();
    }
    
    
    public interface Provider{
        Service getService();
    }
    
    
    public class ServiceImp implement Service{
    
       public void startService{
           System.out.println("get serviceImpl start Service.");
       }
    
    }
    
    public class ProviderImpl implement Provider{
    
      static{
        ServiceManager.register("test",new ProviderImpl());
      }
    
       public Service getService(){
         return new serviceImpl();
       }
    }
    
    
    public final class ServiceManager{
        private Map maps= new ConcurrentHashMap<>();
    
        public static void register(String name,Provider provider){
           if(name!=null && provider!=null && !maps.containKey(provider)){
              maps.put(name,provider);
           }else{
             throw new IllegeException("invaild synax.");
           }
    
        }
    
        public static Service getService(String key){
             Provider provider=maps.get(key);
             if(provider!=null){
               return provider.getService();
             }else{
               throw new IllegeException("register provider first,please.");
             }
       }
    }
    
    
    //  
    public class TestMain{
    
       public static void main(String[] args){
           Class.forName("xx.xxx.ProviderImpl");
           Service service=ServiceManager.getService();
           service.startService();
    
    
       }
    }

    좋은 웹페이지 즐겨찾기