私は所有していないクラスの実装を隠そうとしています。私はクラスを拡張し、自分のインターフェイスを実装するこれをやりたいJava OO:これも可能ですか?
QueueInfo info = admin.getQueue(queueName);
QueueInfoは私が所有していないクラスです。このオブジェクトのインスタンスを取得するには、取得するために管理オブジェクトを使用する必要があります。私はIQueueInfoというインターフェースを通してこの実装を非表示にしたいと思っています。 IQueueInfoは、消費者がQueueInfoから必要とするものにアクセスするだけです。このQueueInfoを取得するには、EMSQueueInfoという独自のオブジェクトを使用したいと思います。ここで私はこれをセットアップ想像する方法です:
public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
//...
}
これは私の消費者は、インタフェースIQueueInfoかかわらず動作することができますし、それが基礎となるEMSQueueInfoがQueueInfoが持っているすべてのものへのアクセス権を持つことができます。私の問題は、QueueInfoの "ライブ"インスタンスを取得することにあります。 QueueInfoの定期的なインスタンスを取得するには、私は言うことができる:それは管理オブジェクトによって作成されていなかったのように
QueueInfo info = new QueueInfo(queueName);
このインスタンスは、「ライブ」ではありません。したがって、これを行う:
public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
public EMSQueueInfo(String queueName){
super(queueName);
}
}
私に "ライブ"オブジェクトを与えません。私ができると思うのは次のようなものです:
public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
public EMSQueueInfo(String queueName, Admin admin){
super = admin.getQueue(queueName);
}
}
しかし、それは不可能です。
私はプライベートvarialbe経由のすべてのメソッドへのアクセスを取得し、私のEMSQueueInfoクラスから延び取り除き、自分自身アップオブジェクトをラップしている見ている唯一のソリューション:
public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
private QueueInfo _queueInfo
public EMSQueueInfo(String queueName, Admin admin){
_queueInfo = admin.getQueue(queueName);
}
public int getMessagesOnQueue() {
return _queueInfo.getMessagesOnQueue();
}
}
そのソリューションは、作業を行います私はそれを嫌っている。誰かがより良い方法を考えることができますか? OOを壊してそれを悪用しようとしていますか?ここでも、IQueueInfoを使用してコンシューマーが作業できるようにするため、IQueueInfoを使用して、QueueInfoのJMS実装またはQueueInfoのMSMQ実装にアクセスすることができるため、これをすべて実行しています。どんな助けも素晴らしいだろう!
私は、あなたが隠そうとしているクラスを拡張することには注意が必要です。私は構成上の問題は見ません。 –
Googleファクトリメソッド – Bohemian
「アダプタ」パターンについて説明しました。その一部の部分にのみアクセスできるようにラップします。だからあなたは**そのqueueInfoを隠しておきたい。そうしないと、人々はあなたが望むものだけでなく、その上のすべてのフィールドにアクセスすることができます。 –