Java设计模式——外观模式

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

外观模式非常简单

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

下面开始先定义几个接口

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值