29

Java设计模式——外观模式

 4 years ago
source link: https://www.tuicool.com/articles/6bUJbqA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mingyunxiaohai/article/details/91358206

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

外观模式非常简单

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

下面开始先定义几个接口

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK