まず準備として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の部分的コピーなので、こうなります。
さて、これで準備はできました。例外も含めソースコードは次の通りです。