外观模式:隐藏了系统的复杂性,为子系统中的一组接口提供了一个统一的访问接口。高内聚低耦合。
例子:比如一个网络框架一般都有缓存策略,首先从内存中查找,找不到在去硬盘中查找,还找不到在去网络上下载。
下面开始先定义几个接口
1 2 3 4 5 6 7 8 9
| public interface MemoryCache { Bitmap findFromMemory(String url); } public interface DiskCache { Bitmap findFromDisk(String url); } public interface NetworkCache { InputStream findFromNetwork(String url); }
|
定义实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 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; } }
|
一般情况下回这么调用
1 2 3 4 5 6 7 8
| MemoryCache memoryCache = new MemoryCacheImpl(); memoryCache.findFromMemory("http...");
DiskCache diskCache = new DiskCacheImpl(); diskCache.findFromDisk("http...");
NetworkCache networkCache = new NetworkCacheImpl(); networkCache.findFromNetwork("http...");
|
如果使用外观模式,把这几个类封装到一个类中,使用起来就方便很多了如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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); } }
|
使用
1 2
| Facade facade = new Facade("http..."); facade.load();
|
效果跟之前一想,看起来就清爽很多了。