设计模式——终极奥义
设计模式的本质就是工程学思维,当所开发的项目或者参与的开源框架,代码的量达到一定程度时就需要对模块进行拆分,设计模式就是研究如何在工程中划分出多个模块,通过平行、嵌入、继承等方式来提高代码的扩展性、直观性、整体性以及弹性(避免硬编码);设计模式常用的思想就是抽象思维,将某些共有的部分进行抽象,模拟工程管理思维来进行代码管理便于人思维更好的理解代码以及改进代码
设计模式——基本原则
基本准则仅仅保证了在设计某个小模块时,能够具有的基本要求的代码,却不能保证框架的整体性;
单一职责
设计接口的准则,只是一个接口的表现形式尽可能越单一越好
开闭原则
软件中的对象(类、函数)当需要升级改造时,应提供相应的方法,比如:
增加配置类、替换配置类、覆盖配置类实现升级
,而不是修改原有代码实现更替(除非原有代码又bug),避免原有代码主流程被破坏导致用户不可预知的一些错误
里式替换原则
只要父类出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常;
这算是父子类的重写方法约束或者子类继承后不要把父类的特性发生改变
,就是当你设计父类作为所有子类的共用方法时,尽量不要用子类重写父类的这个方法,导致整体表现性出现破坏,可以把这个方法final一下;
依赖倒置原则
其指出了一种特点的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节的目的,依赖模块被颠倒了。
几个关键点:
(1)高层模块不应该依赖底层模块,两者都应该依赖其抽象。
(2)抽象不依赖于细节。
(3)细节应该依赖抽象,被抽象指明方式调用形式
接口隔离原则
接口隔离的
反义词就是两个类中实现类相互嵌套
,但是接口隔离原则就是这个类抽象成几个接口,然后利用特定方式注入不同的实现类
直接注入实现类
MultipartResolver+Locale在一个impl实现类中实现
public class DispatcherServlet{
private MultipartResolverIAndLocaleImpl multipartResolverIAndLocaleImpl ;
}
接口隔离
MultipartResolverIAndLocaleImpl 拆分成接口LocaleResolver 、MultipartResolver ,每个实现不同模块的方法,然后实现类由外部指定就是将实现类化为多个接口实现隔离
public class DispatcherServlet{
private LocaleResolver localeResolver;
private MultipartResolver multipartResolver;
}
public interface MultipartResolver {
boolean isMultipart(HttpServletRequest request);
MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException;
void cleanupMultipart(MultipartHttpServletRequest request);
}
public interface LocaleResolver {
Locale resolveLocale(HttpServletRequest request);
void setLocale(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable Locale locale);
}
迪米特原则
两个类之间互相知道的越少越好,内部细节自己完成,
对外暴露一个方法(甚至构造器),然后内部完成一系列的细节
,而不是所有细节在外部一个个调用,但就要注意为了提高多个类复用这一个类你对外暴露的方法就要在参数通用上下功夫
设计模式——基本思想
从框架的整体性出现,提供代码维护以及设计模式运用的统一性和全局观;因为没有对此做个思考,就举例几个简单的例子先暂时方法,日后再做深入分析;
SPI设计风格
SpringBoot中,利用spirng.factorys做接口实现类的发现,这样的好处就是关键实现类能再配置文件中统一发现,而不是在代码中直接注入,实现处集成展示更利用把握框架全局
URL映射风格
MVC编程风格中,利用url实现功能和服务之间的相互调用,对于传统编程人员来讲功能更加直观,因为配合url路径嵌套表述业务父子关系且外加动词来说明功能能直观的看到这块是干嘛,且能通透层级关系,如果框架设计中利用这种机制呢?
MVC编程风格
省略