设计模式应用案例之策略模式
什么时策略模式:策略模式(Strategy Pattern)是一种设计模式,它定义了算法家族(一组实现相同接口的算法类)并使它们之间可以相互替换。通过将算法的实现与客户端代码分离,策略模式可以使算法的变化独立于使用算法的客户端,从而提高代码的灵活性和可维护性。在策略模式中,通常会定义一个抽象策略类和多个具体策略类来实现具体的算法。客户端代码通过调用抽象策略类中的方法来实现特定的功能,而具体使用哪个具体策略类,则由客户端根据具体的需求来决定。策略模式常被用于解决算法实现不同、需要动态切换算法等问题。
公司中使用场景:
后端代码写的上传文件是到阿里云,但是我想对这块做扩展,当网络拥塞时可能会切换到腾讯云,或者我想手动切换,在不更改代码,不进行重新部署的情况下,可以随时控制想切换上传的位置,我可以怎么办?
可以使用策略模式来实现上传文件的位置可配置性。具体实现步骤如下:
- 定义一个抽象的文件上传策略接口,例如
FileUploadStrategy,其中包含一个上传文件的方法upload。 - 针对不同的上传位置,实现不同的上传策略类,例如
AliyunFileUploadStrategy和TencentFileUploadStrategy,并实现upload方法。 - 在需要上传文件的地方,使用依赖注入的方式注入一个
FileUploadStrategy实现类的实例。 - 在运行时,可以通过配置文件、系统参数或其他方式来确定当前使用哪个上传策略,然后将对应的
FileUploadStrategy实现类的实例注入到上传文件的代码中,从而实现上传位置的可配置性。
这样做的好处是,当需要切换上传位置时,只需要修改配置文件或者系统参数,而不需要修改代码或重新部署应用。同时,这种做法也符合单一职责原则,每个策略类只负责自己的上传任务。
+---------------------+ +---------------------+
| FileUploadStrategy | |AliyunFileUploadStrategy|
+---------------------+ +---------------------+
| +upload() |<-------| +upload() |
+---------------------+ +---------------------+
|
|
+------------------------+ | +-----------------------+
|TencentFileUploadStrategy| | |FileUploader (client code)|
+------------------------+ +-----------------------+
| +upload() | | +strategy: Aliyun... |
+-----------------------+ +-----------------------+
| +setStrategy() |
| +uploadFile() |
+-----------------------+
以上就是我对这块业务做的一个实现方式,大家有什么更好的方法欢迎来探讨奥!只要有时间我会经常来分享在公司中的一些成长