写点什么

第二周作业

用户头像
新世界
关注
发布于: 2020 年 06 月 16 日
第二周作业

作业一:



  • 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?



依赖倒置原则是指: 由高层定义接口,下层服务去实现接口,这样高层就不会修改代码,下层服务可以根据不同的业务修改对应的代码



好莱坞原则是指:不要给我们打电话,我们会给你打电话(don't call us, we'll call you)”这是著名的好莱坞原则

好莱坞预选演员本来是演员会自己主动报名,然后再筛选,这样筛选范围太大,好莱坞原则的思想是: 如果你足够厉害,我们会找到你的,相当于和之前的报名方式颠倒过来了,所以称为依赖倒置原则



作业二:



  • 请描述一个你熟悉的框架,是如何实现依赖倒置原则的。



一、spring security的 org.springframework.security.core.userdetails.UserDetailsService接口

这个接口定义,方便自己的服务去实现,从而自己去实现认证登录,框架本身不清楚哪些用户可以登录,所以需要自己去实现,只需要实现如下接口,如果不抛出异常证明认证通过,spring security就能判断是一个有效的用户,这是一个典型的依赖倒置原则

/**
* Locates the user based on the username. In the actual implementation, the search
* may possibly be case sensitive, or case insensitive depending on how the
* implementation instance is configured. In this case, the <code>UserDetails</code>
* object that comes back may have a username that is of a different case than what
* was actually requested..
*
* @param username the username identifying the user whose data is required.
*
* @return a fully populated user record (never <code>null</code>)
*
* @throws UsernameNotFoundException if the user could not be found or the user has no
* GrantedAuthority
*/
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;



二、我理解的是: 模板方法就是依赖倒置的一种方式,抽象类定义大部分实现,留出一个抽象方法让下层服务实现,本身是一种依赖倒置原则

比如spring的动态数据源实现: org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource

这个抽象类的抽象方法,定义好抽象接口,让下层去实现,依赖倒置

/**
* Determine the current lookup key. This will typically be
* implemented to check a thread-bound transaction context.
* <p>Allows for arbitrary keys. The returned key needs
* to match the stored lookup key type, as resolved by the
* {@link #resolveSpecifiedLookupKey} method.
*/
protected abstract Object determineCurrentLookupKey();



作业三:



  • 请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。





Cache设计类图如下





学习总结:

本周主要学习了设计模式之下的设计原则:

1、依赖倒置原则

2、接口隔离原则

3、里式替换原则

4、单一职责原则

5、对扩展开放,对修改关闭原则



设计模式是设计原则的一种常用操作,整体设计原则遵循对 高内聚,低耦合的原则



依赖倒置原则到底是如何倒置的?

接口隔离原则主要是暴露的接口恰到好处

里式替换原则是: 父类在任何情况下都能被子类替换

单一职责:一个类和一个方法最好只有做一件事情



每种设计模式中都用了哪些设计原则,框架中的设计用到了哪些设计原则?



用户头像

新世界

关注

还未添加个人签名 2018.03.29 加入

还未添加个人简介

评论

发布
暂无评论
第二周作业