2016-06-20 13 views
0

現在、CライブラリをJavaに移植しています。 Cライブラリは外部デバイスに接続し、デバイスを設定しデータを受信する機能を提供します。私のデザインの中核は、デバイスへの接続をカプセル化し、JNAを使用して生成された低レベルのC APIマッピングを提供するConnectionクラスです。シングルトンパターン、構成および依存性注入

Cライブラリのほとんどは、JavaのOO-World(100以上の関数を含む単一のヘッダライブラリ)にはうまく変換されないため、ほとんどの機能にアクセスするための2つの「マネージャ」クラスがあります。

これらのクラスを複数作成することは意味がありません.Cライブラリはすべてのリソース(構成、データバッファなど)を1つしか管理しないためです。だから、私はJavaクラスのためのシングルトンパターンを実装したい(効果的にも私の新しいJavaライブラリのユーザにシグナルを送り、システム全体に1つのマネージャオブジェクトしかない)。

さらに、外部の設定ファイルを使用してこれらのマネージャクラスを設定できます。以前は設定ユーティリティを実装していませんでしたので、どこに置くべきかわかりません。

最後に、すべてのManagerクラスでは、Connectionオブジェクトへの参照が必要です。

  • Connectionオブジェクト注入し、configファイル
  • を使用して私のクラスを設定して、私のJavaクラスは、ユニークな作り

    1. (Singletonパターン):

      は、だから私は、私を可能にする設計が必要

      アイデア

    答えて

    1

    は、最初の2点については、このようなものは、トリックを行うだろう:

    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; 
        } 
    } 
    

    これは、Javaでのシングルトンの古典的な例です。コンストラクターはprotectedなので、newキーワードを使用してインスタンス化することはできません。代わりに、あなたはこのようにそれを使用します。

    Connection con = Connection.getInstance(); 
    

    getInstance()はインスタンス化の世話をし、あなたのシングルトンのインスタンスが1つだけ、これまで存在が保証されます。例えば、この:

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

    は、第三の点についてはfoobar

    を出力します、私はそれが既に回答されていthis questionにあなたを参照することになり。

    +0

    私は実際に接続が別のオブジェクトに注入されていると話していましたが、私はちょうどセッター注入も使用できると思います。構成(設計上)をどこに置くのですか? –

    +0

    おそらく、設定ファイルを読み込んでそれを何らかの種類のデータ構造に解析する設定クラスです。 –

    +0

    そして、パブリックゲッターとセッターを使ってオブジェクトを設定しますか? –