まず準備としてCacheシステムのインタフェース定義を行いましょう。Cacheそのものは他システムから読み出しと書き込みが行われます。またCPUがRAMにアクセスする場合にはアドレスが指定されるように、アクセスの際にはキーが指定されます。
public interface Cache { public Object read(Object key) throws CacheException; public void write(Object key, Object value) throws CacheException; public void delete(Object key) throws CacheException; }
キーも、値もjava.lang.Objectにしました。実際の利用においては、適当なクラスにキャストして使うことになります。read、wrtie、deleteのそれぞれについて例外を投げるようにしています。キャッシュは必ずその本来のデータ(ここではCache Sourceとしている)のコピーになっていますが、指定されたkeyに対応する領域がない場合等に例外がthroughされるようにしています。
一方Cache Source側は次のようなインタフェースを持つことにします。
public interface CacheSource { public Object read(Object key) throws CacheSourceException; public void write(Object key, Object value) throws CacheSourceException; public void delete(Object key) throws CacheSourceException; };
何だ、Cacheと同じじゃないかと指摘されそうですが、Cacheは本質的にCache Sourceの部分的コピーなので、こうなります。
さて、これで準備はできました。例外も含めソースコードは次の通りです。