- PR -

OutputStream/Writer/DataOutput

1
投稿者投稿内容
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2003-08-22 13:46
お尋ねします。

要件として、文字出力先を
・OutputStream
・Writer
で指定できるようにするために、

out(OutputStream stream) {
out(new OutputStreamWriter(stream));
}
out(Writer writer) {
writer.write("....");
}
(↑あくまでもイメージ)

のようにしています。これで、StreamでもWriterでも
出力できます。

追加要件として、
・DataOutput
でも指定できるようにするためには、どのようにすれば
よいでしょうか?

out(OutputStream stream) {
out(new OutputStreamWriter(stream));
}
out(Writer writer) {
writer.write("....");
writer.write("----");
writer.write("XXXX");
}
out(DataOutput output) {
output.write("....");
output.write("----");
output.write("XXXX");
}
(↑あくまでもイメージ)

現在は、このようにしていますが、やはり同じことを
何度も書きたくないのです。

どのように実装すれば、よいでしょうか?
よろしくお願いします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-08-22 15:41
共通化したいのであれば、共通のラッパーインターフェースを用意し、実際の処理をそっちにたらい回しにしてやれば良いのでは?

文字列として出力する場合においては、一応共通化が計れます。
DataOutputとして、primitive dataを出力するのはこの方法では無理!

ex)
コード:
public interface OutputWrapper {
  public int write(....);
}

public class OutputStreamWapper implements OutputWapper {
  private OutputStream mStream;

  public OutputStreamWapper(OutputStream inStream) {
    mStream = inStream;
  }

  public int write(...) {
    return mStream.write(...);
  }
}

public class DataOutputWapper implements OutputWapper {
  private DataOutput mStream;

  public DataOutputWapper(DataOutput inStream) {
    mStream = inStream;
  }

  public int write(...) {
    return mStream.write(...);
  }
}

トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2003-08-24 15:42
ありがとうございました。

OutputStreamをWriterでwrapするように
DataOutputもOutputStreamかWriterでwrapできれば
よいな(new DataOutputWriter([DataOutput])みたいな)
と思っていましたが、できなさそうなので、
教えていただいた方法で共通化しました。

----
これって、Java(OO?)の設計ではセオリーっぽい
(デザインパターン?)ですが、この類の参考書やサイト
をご存知でしたら、教えていただけないでしょうか?

----
それと、今回の質問で、以前ちょっと興味を持った
「アスペクト指向」が頭をよぎりましたが、そういう
解決策はあるでしょうか?
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-08-24 17:19
引用:

これって、Java(OO?)の設計ではセオリーっぽい
(デザインパターン?)ですが、この類の参考書やサイト
をご存知でしたら、教えていただけないでしょうか?



Adapterのパターンかな。たぶん...
1

スキルアップ/キャリアアップ(JOB@IT)