Несколько дней назад я наткнулся на это сообщение в блоге , в котором есть подключаемый менеджер кеша для использования разных провайдеров кеша.в основном, у нас есть интерфейс ICacheProvider:
public interface ICacheProvider
{
void Store(string key, object data);
void Destroy(string key);
T Get<T>(string key);
}
и класс CacheManager:
public class CacheManager
{
protected ICacheProvider _repository;
public CacheManager(ICacheProvider repository)
{
_repository = repository;
}
public void Store(string key, object data)
{
_repository.Store(key, data);
}
public void Destroy(string key)
{
_repository.Destroy(key);
}
public T Get<T>(string key)
{
return _repository.Get<T>(key);
}
}
И, наконец, мы можем написать нашего собственного поставщика:
public class SessionProvider : ICacheProvider
{
public void Store(string key, object data)
{
HttpContext.Current.Cache.Insert(key, data);
}
public void Destroy(string key)
{
HttpContext.Current.Cache.Remove(key);
}
public T Get<T>(string key)
{
T item = default(T);
if (HttpContext.Current.Cache[key] != null)
{
item = (T)HttpContext.Current.Cache[key];
}
return item;
}
}
Ну, я почти уверен, что этот код использует шаблон адаптера, основанный на определении в http://www.dofactory.com/Patterns/PatternAdapter.aspx.
Но кажется, что мы можем сказать, что он также использует шаблон репозитория (за исключением того, что он не имеет ничего общего с основными операциями CRUDна данных, которые обычно используются в шаблоне Repository).Он оборачивает общие вещи для менеджера кеша в интерфейсе.
Можно ли сказать, что этот код использует шаблон адаптера и шаблон адаптера?