策略模式与SPI机制,到底有什么不同?

更新时间:2023-08-08 05:17:50 阅读: 评论:0

策略模式与SPI机制,到底有什么不同?
这⾥说的策略模式是⼀种设计模式,经常⽤于有多种分⽀情况的程序设计中。例如我们去掉⽔果⽪,⼀般来说对于不同的⽔果,会有不同的拨⽪⽅式。此时⽤程序语⾔来表⽰是这样的:
if(type == apple){
//deal with apple
} el if (type == banana){荷花塘边
//deal with banana
} el if (type == ......){
//......
}
如上⾯代码所写,我们⽤条件语句块去判断不同类型的⽔果,之后采取不同的剥⽪⽅法。但这种⽅式在程序设计领域会导致原来的代码被修改,即每次我们要新增⼀种⽔果的剥⽪,我们必须去修改原来的代
码,这样会导致原来的代码不稳定。于是我们采取更好的⽅式去实现不同⽔果的剥⽪功能,那就是策略模式。
public interface PeelOff {
void peelOff();
}
public class ApplePeelOff implement PeelOff{盲目从众
void peelOff(){
//deal with apple
}
}
public class BananaPeelOff implement PeelOff{
void peelOff(){
古乡
//deal with banan
}山药香菇汤
}
public class PeelOffFactory{
private Map<String, PeelOff> map = new HashMap();
private init(){
//init all the Class that implements PeelOff interface
}
}
public static void main(){
String type = "apple";
亚马逊之泪
PeelOff peelOff = PeelOff(type);  //get ApplePeelOff Class Instance.
peelOff.pealOff();
}
对于这种⽅法,我们下次要新增⼀种⽔果的剥⽪⽅式,我们只需要新建⼀个⽔果剥⽪类,让它实现 PeefOff 接⼝就好了。使⽤策略模式实现的业务逻辑更加灵活,⼀般经常⽤来替代程序设计中的条件语句块。
⽽ SPI 机制其实与策略模式类似,其实 Java 中使⽤的⼀种技术实现,全称是 Service Provider Interface,即服务提供接⼝,⼀般⽤在开源框架研发领域。例如 Java 中关于 JDBC 连接的实现就⽤到了 SPI 机制。在 JDBC 连接中,因为有各种各样的数据库,每种数据库的实现⽅式都不⼀样,因此期待 JDK 去把所有的数据库实现⼀遍是不现实的。于是,JDK 提供了⼀个接⼝,你只要按照我的规范去实现,那么我就能够保证⽤户能连上你的数据库,这套规范就是 SPI 机制。关于 SPI 机制,你可以看我写的另⼀篇⽂章,或许你能更好地理解:《我是SPI,我让框架更加优雅了!》
那么策略模式和 SPI 机制到底有什么区别呢?
如果从代码接⼊的级别来看,策略模式还是在原有项⽬中进⾏代码修改,只不过它不会修改原有类中
的代码,⽽是新建了⼀个类。⽽SPI 机制则是不会修改原有项⽬中的代码,其会新建⼀个项⽬,最终以 Jar 包引⼊的⽅式代码。
从这⼀点来看,⽆论策略模式还是 SPI 机制,他们都是将修改与原来的代码隔离开来,从⽽避免新增代码对原有代码的影响。但策略模式是类层次上的隔离,⽽ SPI 机制则是项⽬框架级别的隔离。
咖啡加奶茶从应⽤领域来说,策略模式更多应⽤在业务领域,即业务代码书写以及业务代码重构。⽽ SPI 机制更多则是⽤于框架的设计领域,通过SPI 机制提供的灵活性,让框架拥有良好的插件特性,便于扩展。
总结⼀下,策略模式与 SPI 机制有下⾯⼏点异同:
不够时间好好来爱你
从设计思想来看。策略模式和 SPI 机制其思想是类似的,都是通过⼀定的设计隔离变化的部分,从⽽让原有部分更加稳定。
从隔离级别来看。策略模式的隔离是类级别的隔离,⽽ SPI 机制是项⽬级别的隔离。
钱金铎从应⽤领域来看。策略模式更多⽤在业务代码书写,SPI 机制更多⽤于框架的设计。
关于策略模式与 SPI 机制就说到这⾥,如果有什么想了解的,欢迎留⾔告诉我。

本文发布于:2023-08-08 05:17:50,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1106821.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:dpeel翻译
下一篇:菜名英语翻译
标签:策略   代码   模式   业务   领域   实现   机制   隔离
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图