当前位置: 首页 > news >正文

php网站部署步骤开发一个物流app需要多少钱

php网站部署步骤,开发一个物流app需要多少钱,互动网站建设公司,广东网站设计服务商一、策略模式 背景 针对某种业务可能存在多种实现方式;传统方式是通过传统if…else…或者switch代码判断; 弊端: 代码可读性差扩展性差难以维护 策略模式简介 策略模式是一种行为型模式,它将对象和行为分开,将行…

一、策略模式

背景

针对某种业务可能存在多种实现方式;传统方式是通过传统if…else…或者switch代码判断;

弊端:

  • 代码可读性差
  • 扩展性差
  • 难以维护

策略模式简介

策略模式是一种行为型模式,它将对象和行为分开,将行为定义为一个行为接口和具体行为的实现。

组成:

  • 抽象策略类(Strategy):策略的抽象;
  • 具体策略类(ConcreteStrategy):具体的策略实现,一种具体实现;
  • 环境类(Context):用来操作策略的上下文环境;

二、代码实现

以文件存储方式为例

抽象策略类

package com.qiangesoft.file.core;import org.springframework.web.multipart.MultipartFile;/*** 文件存储策略接口** @author qiangesoft* @date 2024-01-06*/
public interface FileStoreStrategy {/*** 存储方式** @return*/String getType();/*** 上传文件** @param file* @return* @throws Exception*/void uploadFile(MultipartFile file) throws Exception;
}

具体策略实现

本地存储

package com.qiangesoft.file.core.local;import com.qiangesoft.file.core.FileStoreStrategy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;/*** 文件本地存储** @author qiangesoft* @date 2024-01-06*/
@Component
@Slf4j
public class LocalStoreStrategyImpl implements FileStoreStrategy {@Overridepublic String getType() {return "LOCAL";}@Overridepublic void uploadFile(MultipartFile file) throws Exception {log.info("upload file by local");}
}

minio存储

package com.qiangesoft.file.core.minio;import com.qiangesoft.file.core.FileStoreStrategy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;/*** 文件minio对象存储** @author qiangesoft* @date 2024-01-06*/
@Component
@Slf4j
public class MinioStoreStrategyImpl implements FileStoreStrategy {@Overridepublic String getType() {return "MINIO";}@Overridepublic void uploadFile(MultipartFile file) throws Exception {log.info("upload file by minio");}
}

策略上下文环境

package com.qiangesoft.file.core;import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** 文件存储策略上下文** @author qiangesoft* @date 2024-01-06*/
@Component
public class FileStoreStrategyContext {/*** 策略实现类上下文*/private final Map<String, FileStoreStrategy> strategyMap = new ConcurrentHashMap<>();/*** 利用Spring的发现机制,将实现了FileStoreStrategy的类都放到strategyMap里面*/public FileStoreStrategyContext(List<FileStoreStrategy> fileStoreStrategyList) {for (FileStoreStrategy strategy : fileStoreStrategyList) {String type = strategy.getType();if (this.strategyMap.containsKey(type)) {throw new RuntimeException(String.format("Strategy [%s] is repeat!", type));}this.strategyMap.put(type, strategy);}}/*** 获取具体的策略实现类** @param storeType* @return*/public FileStoreStrategy getStrategy(String storeType) {FileStoreStrategy strategy = strategyMap.get(storeType);if (strategy == null) {throw new RuntimeException(String.format("Strategy [%s] is not found!", storeType));}return strategy;}
}

调用

package com.qiangesoft.file.demo;import com.qiangesoft.file.core.FileStoreStrategy;
import com.qiangesoft.file.core.FileStoreStrategyContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** Demo** @author qiangesoft* @date 2024-01-08*/
@RestController
@RequestMapping("/demo")
public class DemoController {@Autowiredprivate FileStoreStrategyContext fileStoreStrategyContext;@GetMapping("/upload")public String upload(String type) throws Exception {FileStoreStrategy fileStoreStrategy = fileStoreStrategyContext.getStrategy(type);fileStoreStrategy.uploadFile(null);return fileStoreStrategy.getType();}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

扩展

如果新增一种存储方式,只需增加一个策略实现类,实现FileStoreStrategy接口,重写getType方法,然后再实现具体的业务逻辑;

案例代码

点击下载

http://www.yayakq.cn/news/117141/

相关文章:

  • 网站开发主要参考文献微信视频号推广价格
  • 山东经济建设网站国外做的比较好的展台网站
  • 有什么可以在线做数学题的网站大连网站建设找简维科技
  • 上海手机网站建设报价表苏州园区网站设计公司
  • 湖北建设厅网站安全员名单杭州建设信用网官网
  • 宁波网站优化的关键织梦模板首页修改
  • 网站优化seo网站架构优化阿里云备案网站备案
  • 设计类素材网站做网站一定要用云解析吗
  • 哪里有做网站培训的杭州网站建设方案服务公司
  • 太原哪个网站制作最好用制作网站的过程
  • 能发锚文本的网站微信营销软件升级版
  • 网站官方认证怎么做精利手表网站
  • 建设公司网站意义免费情感网站哪个好
  • 网站建设公司推荐理由郴州网站建设哪家好
  • 网站盈利模式设计网站设计搜索栏怎么做
  • 四川超宇建设集团有限公司网站网易云邮箱
  • 我想投诉做软件的网站深圳网站优化哪家好
  • 徐州网站排名优化邯郸市教育局官网
  • 个人网站欣赏诸城企业网站建设
  • 新网站建设需要注意凡科女装
  • 百度做营销网站多少钱上海建筑设计院有哪些
  • 枣庄手机网站开发印度做网站需要备案吗
  • 网站开发区书籍飞虎队网站建设
  • 北京网站推广公司一个网站绑定2个域名
  • 深圳专业网站设计公司地址小说风云榜
  • 二级目录网站怎么做电脑版商城网站建设
  • 建设购物网站要求网易做网站
  • 个人网站的设计与实现的任务书做论坛网站怎么赚钱吗
  • 秦皇岛建设信息网站农林网站建设
  • 企业网站建设方案详细方案网站建设的课程设计报告