写点什么

接口隔离原则设计缓存 Cache 工具类

用户头像
王鹏飞
关注
发布于: 2020 年 06 月 17 日
接口隔离原则设计缓存Cache工具类

将缓存工具类 Cache 进行改造按照接口隔离原则进行改造

public class Cache {
public void put(Object key, Object value) {
}
public void delete(Object key) {
}
public Object get(Object key) {
return null;
}
public void reBuild(Object conf) {
}
}

提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。





Java 代码样例:



public interface BaseCacheOperationInterface {
void put(Object key,Object value);
void delete(Object key);
Object get(Object key);
}



public interface ReBuildCacheOperationInterface {
void reBuild(Object conf);
}



public interface CacheOperationInterface extends BaseCacheOperationInterface,ReBuildCacheOperationInterface {
}



public class CacheOperationInterfaceImpl implements CacheOperationInterface {
/**
* put get delete 方法是需要暴露给应用程序
* @return
*/
public static BaseCacheOperationInterface getCacheOperationInterfaceForRemote(){
return new CacheOperationInterfaceImpl();
}
/**
* rebuild 暴露给系统远程调用
* @return
*/
public static ReBuildCacheOperationInterface getReBuildCacheOperationInterfaceForRemote(){
return new CacheOperationInterfaceImpl();
}
/**
* 全部暴露给系统远程调用
* @return
*/
public static CacheOperationInterface getCacheOperationInterfaceForRemote(){
return new CacheOperationInterfaceImpl();
}
@Override
public void put(Object key, Object value) {
}
@Override
public void delete(Object key) {
}
@Override
public Object get(Object key) {
return null;
}
@Override
public void reBuild(Object conf) {
}
}



public class CacheOperationDemo {
/**
* 调用用例
* @param args
*/
public static void main(String[] args) {
//put get delete 方法是需要暴露给应用程序
BaseCacheOperationInterface baseCacheOperationInterface = CacheOperationInterfaceImpl.getCacheOperationInterfaceForRemote();
baseCacheOperationInterface.delete("key");
baseCacheOperationInterface.get("key");
baseCacheOperationInterface.put("key","value");
//rebuild 暴露给系统远程调用
ReBuildCacheOperationInterface reBuildCacheOperationInterface = CacheOperationInterfaceImpl.getReBuildCacheOperationInterfaceForRemote();
reBuildCacheOperationInterface.reBuild("");
}
}



总结:

接口隔离原则,调用者只能访问它自己的方法,不能访问到不应该访问的方法。似乎感受到了设计原则在代码实现上的美。



总结(第二周)

面向对象设计的目标(高内聚,低耦合)易扩展,更强制,可移植,更简单。反例如:僵硬,脆弱,不可移植,导致误用的陷阱,晦涩,过度设计,copy-paste 代码。

设计原则:

  • 开闭原则(对于扩展开发,对于更改关闭)

不需要修改软件的实体(模块,函数,类等)就应该能实现对功能的扩展。可应用设计模式有:策略模式,适配器模式,观察者模式。

  • 依赖倒置原则

高层不依赖低层,而大家都依赖抽象,抽象不依赖实现而实现依赖抽象。

  • Liskov替换原则(里氏替换原则)

子类型必须能够替换掉他们的基类。



发布于: 2020 年 06 月 17 日阅读数: 86
用户头像

王鹏飞

关注

还未添加个人签名 2019.06.11 加入

还未添加个人简介

评论

发布
暂无评论
接口隔离原则设计缓存Cache工具类