« NetJan設計 Network - ソケット接続 | トップページ | 写真の撮影日から、自動フォルダ作成してPCへコピーするPerlスクリプト »

NetJan設計 Model - ディープコピー

一部設計変更。 Modelの表示パフォーマンス目的の、Modelクラスを親クラスにして、上位Modelクラスに変更を通知する方法だと色々と不都合が生じてくる。

controlパッケージから新旧のModelをuiへ渡して、表示時に変更有無を判断させる方式とする。 旧Modelを持つためには、ディープコピーを行う必要があるが、javaのcloneメソッドを使うと各Model派生クラスでオーバーライドする必要があるため、Serializable(シリアライズ)を利用したディープコピーを行う。 下記のようなサービス関数を持つクラスを1つ作成してそれを利用する。

  public static Object deepCopy(Serializable original) {
    if (original == null) {
      return null;
    }
    Object ret_obj = null;
    ObjectInputStream in_obj;
    try {
      ByteArrayOutputStream out_byte = new ByteArrayOutputStream();
      ObjectOutputStream out_obj = new ObjectOutputStream(out_byte);
      out_obj.writeObject(original);
      ByteArrayInputStream in_byte =
      new ByteArrayInputStream(out_byte.toByteArray());
      in_obj = new ObjectInputStream(in_byte);
      ret_obj = in_obj.readObject();

    } catch (IOException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    return ret_obj;
  }

|

« NetJan設計 Network - ソケット接続 | トップページ | 写真の撮影日から、自動フォルダ作成してPCへコピーするPerlスクリプト »

麻雀ゲーム作成」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/440382/28078012

この記事へのトラックバック一覧です: NetJan設計 Model - ディープコピー:

« NetJan設計 Network - ソケット接続 | トップページ | 写真の撮影日から、自動フォルダ作成してPCへコピーするPerlスクリプト »