2016-06-20 4 views
0

현재 C 라이브러리를 Java로 이식 중입니다. C 라이브러리는 외부 장치에 연결하고 장치를 구성하고 데이터를 수신하는 기능을 제공합니다. 내 디자인의 핵심은 장치에 대한 연결을 캡슐화하고 JNA를 사용하여 생성 된 하위 수준의 C API 매핑을 제공하는 Connection 클래스입니다.싱글 톤 패턴, 구성 및 종속성 삽입

대부분의 C 라이브러리는 OO-World of Java (100 개 이상의 함수가 포함 된 단일 헤더 라이브러리)로 잘 변환되지 않으므로 대부분의 기능에 대한 액세스를 제공하는 몇 가지 "Manager"클래스가 있습니다.

C 라이브러리는 하나의 모든 리소스 (구성, 데이터 버퍼 등) 만 관리하므로 이러한 클래스 중 둘 이상을 만드는 것은 의미가 없습니다. 그래서 내 Java 클래스에 대한 Singleton 패턴을 구현하고 싶습니다. (실제로는 새로운 Java 라이브러리의 사용자에게 전체 시스템에 하나의 Manager 객체 만 있음을 알립니다.)

또한 외부 구성 파일을 사용하여 이러한 Manager 클래스를 구성 할 수 있기를 원합니다. 이전에 구성 유틸리티를 구현 한 적이 없으므로 어디에 놓을 지 실제로 알지 못합니다.

마지막으로 내 모든 Manager 클래스에는 Connection 개체에 대한 참조가 필요합니다.

  • Connection 객체 주사 설정 파일
  • 를 사용하여 내 클래스를 구성 내 자바 클래스 고유하게

    1. (싱글 톤 패턴) :

      그래서 난 날 수있는 디자인이 필요합니다

      아이디어가 있으십니까?

    답변

    1

    처음 두 점의 경우,이 같은 트릭을 할 것입니다 :

    public class Connection{ 
    
        private static Connection instance = null; 
        private String connectionString; 
    
        protected Connection() { 
        } 
    
        public static Connection getInstance() { 
         if(instance == null) { 
          instance = new Connection(); 
         } 
         return instance; 
        } 
    
        public void setConnectionString(String connectionString){ 
         this.connectionString = connectionString; 
        } 
    
        public String getConnectionString(){ 
         return this.connectionString; 
        } 
    } 
    

    그것은 자바 싱글의 고전적인 예입니다. 생성자는 protected이므로 new 키워드를 사용하여 인스턴스를 생성 할 수 없습니다. 대신, 당신은 다음과 같이 사용 :

    Connection con = Connection.getInstance(); 
    

    getInstance()는 인스턴스을 담당하고 존재 적됩니다 싱글의 한 인스턴스를 보장합니다. 예를 들어,이 :

    Connection con = Connection.getInstance(); 
        con.setConnectionString("foobar"); 
    
        Connection con2 = Connection.getInstance(); 
        System.out.println(con2.getConnectionString()); 
    

    은 이미 답을했다 어디 this question 당신을 참조 할 것, 세 번째 점의 경우 foobar

    를 인쇄합니다.

    +0

    실제로 다른 개체에 주입되는 연결에 대해 말하고 있었지만 setter injection을 사용할 수도 있습니다. 구성 (설계 방식)은 어디에 두겠습니까? –

    +0

    아마도 구성 파일을 읽고 그것을 어떤 종류의 데이터 구조로 파싱하는 구성 클래스 일 것입니다. –

    +0

    그리고 public getters와 setters를 사용하여 객체를 구성 하시겠습니까? –