Send to your Kindle ***例えば… [#d135b5b2] Search→Fetch Key.New→Store 組み合わせて使う。 RIGHT:[[:t/永続化]] [[:t/実装]] 永続化を実装するには? ---- #contents ***FlyweightFactory [#j900c9cb] キーを返すメソッドと、キーが必要なメソッドがある。 ファイルを扱うのでFlyweightパターン。ファイルの変更は行わない。生成と削除と読み取りだけ。 †[[http://www.ie.u-ryukyu.ac.jp/~e085739/java.it.11.html]] -Fetch(Keys) => Objects | Null キーが必要。 呼び出してからロックを取得するので、要求したオブジェクトが消えている場合がある。 呼び出し後はすでにロックが解除されている。 存在確認のために使うこともできる。 -Store(Key, Object) => Key | Null キーが必要。 保存できていたらそのキー/さもなくば「保存できなかった」という何かを返す。 †[[:i/シリアライズが必要]] -Search(path:String = "", label_value_pairs:Dictionary = {}, extensions:Strings = {}) => Key キーを生成。 いろいろ指定 → 適合するキー(複数) いろいろとは…キーの一部 または永続化クラスが特別視する部分…例えばクラス名とか。 存在するキーになるよう補完して返す。指定のないフィールドがワイルドカード化。正規表現不要。何も指定されないと存在する全てのキーを返す。 -%%ValidateKeys(Keys) => ValidKeys%% %%キー(複数) → 使えるキー(複数)%% %%永続化クラス内部で使われるので、呼び出し側が使う必要は無い。%% %%Storeせずに使えるキーを得るために。%% →Key.New()でいい。 -Lock(Key, UseBlocking:bool) => bool 他のStore()を禁止。 Store()のための存在確認としても使える。 -Unlock(Key) => true ロック解除できなければ例外。 すでに解除されているかロックできてないのに呼んだ場合はアサーションエラー。アサーションが無効化されているなら解除成功とする。 ***Key [#x7c759e3] 実装では”FlyweightKey”のような名前にして。 -.New(String) => Key キーを生成。 -.New(path:String = "", label_value_pairs:Dictionary = {}, extensions:Strings = {}) => Key キーを生成。 Searchと同じ引数。こちらは存在しないキーを生成して返す。何も指定しないときは完全におまかせ。 ***例えば… [#d135b5b2] Search→Fetch Key.New→Store 組み合わせて使う。 ***[[:i/シリアライズが必要]] [#de841db8]