0

複数のクラス間で1つのインスタンスを共有する必要があります。Connectクラスには、URLを作成し、データをダウンロードするためのメソッドがあります。uiは、URLを作成するためのデータを取得するためのインターフェイス(スイングフォーム)です(日付はURLを構成します)。

それを行うための最良の方法は何ですか?

の考え:

1)グローバル化:

public class Global {

public static  Connect c;
}

2)main()でインスタンスを作成し、それをオブジェクトに渡します。

public static void main(String[] args) throws IOException {

           Connect c = new Connect();   // get url to download from
           ui form = new ui(c);         // the form to get data from 
.
.
.

もしあれば、何がより合理的だと思われますか?

ありがとうございました。

4

2 に答える 2

2

通常、推奨される方法は、インスタンスを必要とするクラスのコンストラクターにインスタンスを渡すことです。そうすれば、誰かがセットアップしたかどうかGlobal.c、いつ使用できるようになるかは推測できません。また、各クラスにオブジェクトが必要であることも明確に文書化されていConnectます。もう1つの利点は、コードが変更され、UIクラスが同じグローバルインスタンスに依存しないようConnectにする場合、このグローバルコンテキストからマジックインスタンスをプルするすべてのコードを変更する必要がなくなり、渡すことができることです。別のオブジェクト。

「グローバル変数が悪い理由」または「シングルトンアクセサーが悪い理由」に沿って何かを検索すると、私の説明よりもはるかに詳細な情報が得られます。それらの用途はありますが、前もってそれらを避けることができれば、将来の頭痛の種を減らすことができます。すべての場合と同様に、それぞれにトレードオフがあります。

于 2012-07-01T13:04:00.247 に答える
0

最初のオプションには十分注意する必要があります。私が見ているように、ここには多くの欠点があります。

  • オブジェクト指向のプログラミングスタイルではありません。昔ながらのCコードの匂いがする
  • このようなインスタンスを多数サポートする必要がある場合はどうなりますか。
  • これらを変更する必要がある場合(これらのインスタンスが不変でない場合は、派手な言葉で)どうなりますか?
  • アプリケーションがマルチスレッドになるとどうなりますか?

これらのポイントのいくつかは、あなたが説明した2番目のソリューションに有効に適用できますが、コードの保守性と可読性の観点から、最初のソリューションは単なる混乱です...

だから私には2番目の方が良いです。

お役に立てれば

于 2012-07-01T13:46:51.550 に答える