外观模式:隐藏了系统的复杂性,为子系统中的一组接口提供了一个统一的访问接口。高内聚低耦合。
外观模式非常简单
例子:比如一个网络框架一般都有缓存策略,首先从内存中查找,找不到在去硬盘中查找,还找不到在去网络上下载。
下面开始先定义几个接口
public interface MemoryCache {
Bitmap findFromMemory(String url);
}
public interface DiskCache {
Bitmap findFromDisk(String url);
}
public interface NetworkCache {
InputStream findFromNetwork(String url);
}
定义实现类
public class MemoryCacheImpl implements MemoryCache {
@Override
public Bitmap findFromMemory(String url) {
System.out.println("从内存中查找");
return null;
}
}
public class DiskCacheImpl implements DiskCache {
@Override
public Bitmap findFromDisk(String url) {
System.out.println("从硬盘查找");
return null;
}
}
public class NetworkCacheImpl implements NetworkCache {
@Override
public InputStream findFromNetwork(String url) {
System.out.println("从网络获取");
return null;
}
}
一般情况下回这么调用
MemoryCache memoryCache = new MemoryCacheImpl();
memoryCache.findFromMemory("http...");
DiskCache diskCache = new DiskCacheImpl();
diskCache.findFromDisk("http...");
NetworkCache networkCache = new NetworkCacheImpl();
networkCache.findFromNetwork("http...");
如果使用外观模式,把这几个类封装到一个类中,使用起来就方便很多了如下
public class Facade {
private String url;
private MemoryCache mMemoryCache;
private DiskCache mDiskCache;
private NetworkCache mNetworkCache;
public Facade(String url) {
this.url = url;
mMemoryCache = new MemoryCacheImpl();
mDiskCache = new DiskCacheImpl();
mNetworkCache = new NetworkCacheImpl();
}
public void load(){
mNetworkCache.findFromNetwork(url);
mDiskCache.findFromDisk(url);
mNetworkCache.findFromNetwork(url);
}
}
使用
Facade facade = new Facade("http...");
facade.load();
效果跟之前一想,看起来就清爽很多了。