外观模式

外观模式:隐藏了系统的复杂性,为子系统中的一组接口提供了一个统一的访问接口。高内聚低耦合。

例子:比如一个网络框架一般都有缓存策略,首先从内存中查找,找不到在去硬盘中查找,还找不到在去网络上下载。

下面开始先定义几个接口

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();

效果跟之前一想,看起来就清爽很多了。

コメント

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×