1. 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
在开发过程中存在高层和底层之分,如果高层依赖底层,那么在底层调整时,可能会导致高层受到影响。而依赖倒置原则是通过高层依赖抽象接口,底层也依赖于高层的抽象,只要保证抽象不变,那么无论底层的具体实现是否改变,高层都不会受到影响。
好莱坞原则,是说 don't call us,we will call you,意思是高层不要主动去关注底层的细节,我们开发的代码不要去调用框架,而是遵循框架依赖的抽象,我们也依赖抽象去进行开发实现。这样能保证框架可以调用我们的代码,也就是框架(好莱坞)会 call 我们编写的代码。
2.请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
1.首先把 Cache 实现的操作和配置功能隔离出两个接口,ICacheAction 和 ICacheConfig;
2.分别编写两个适配器,分别依赖这里两个接口,让 Cache 类同时实现 ICacheAction 和 ICacheConfig;
3.在适配器中使用依赖的抽象来调用;
部分代码实现:
ICacheAction 接口
public interface ICacheAction {
Object get(Object key);
void put(Object key, Object value);
void delete(Object key);
}
复制代码
ICacheConfig 接口
public interface ICacheConfig {
void reBuild(Config conf);
}
复制代码
Cache 类
public class Cache implements ICacheAction,ICacheConfig{
public Object get(Object key) {
return null;
}
public void put(Object key, Object value) {
}
public void delete(Object key) {
}
public void reBuild(Config conf) {
}
}
复制代码
CacheActionAdapter 类
public class CacheActionAdapter implements ICacheAction{
private ICacheAction cache;
public CacheActionAdapter(ICacheAction cache) {
this.cache = cache;
}
public Object get(Object key) {
return cache.get(key);
}
public void put(Object key, Object value) {
cache.put(key,value);
}
public void delete(Object key) {
cache.delete(key);
}
}
复制代码
CacheConfigAdapter 类
public class CacheConfigAdapter implements ICacheConfig{
private ICacheConfig cache;
public CacheConfigAdapter(ICacheConfig cache) {
this.cache = cache;
}
public void reBuild(Config conf) {
cache.reBuild(conf);
}
}
复制代码
评论