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

wordpress心情插件seo怎样优化网站

wordpress心情插件,seo怎样优化网站,百拓公司做网站怎么样,郑州证件制作优化if-else的几种方式 策略模式1、创建支付策略接口2、书写不同的支付方式逻辑代码微信支付QQ支付 3、service层的实现类使用4、controller层的调用说明 枚举与策略模式结合1、创建枚举2、service层书写处理方法3、controller层调用4、说明 Lambda表达式与函数接口说明 策略模…

优化if-else的几种方式

  • 策略模式
    • 1、创建支付策略接口
    • 2、书写不同的支付方式逻辑代码
      • 微信支付
      • QQ支付
    • 3、service层的实现类使用
    • 4、controller层的调用
    • 说明
  • 枚举与策略模式结合
    • 1、创建枚举
    • 2、service层书写处理方法
    • 3、controller层调用
    • 4、说明
  • Lambda表达式与函数接口
    • 说明

策略模式

策略模式允许在运行时选择算法。策略模式是将算法定义成独立的类,并在运行时动态选择要使用的具体的算法,以此来避免多个if-else或switch语句的使用。
下面以支付功能为例子进行说明。
假设我们有一个支付系统,支持微信、QQ等多种支付方式。用户在支付时会选择自己需要的支付方式,后台功能接口中接收到用户的支付方式选择时,会进行不同的处理。在这里会产生if-else或者switch。如何使用策略模式来消除这些if-else的使用,下面示例说明。

1、创建支付策略接口

/*** 支付策略*/
public interface PaymentStrategy {void pay(double amount);}

2、书写不同的支付方式逻辑代码

微信支付

import org.springframework.stereotype.Component;@Component
public class WeiXinPayment implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("微信支付" + amount);}
}

QQ支付

import org.springframework.stereotype.Component;@Component
public class QQPayment implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("QQ支付" + amount);}
}

3、service层的实现类使用

import com.hysoft.study.service.PaymentStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;/*** 支付实现类*/
@Service
public class PaymentServiceImpl {private final Map<String, PaymentStrategy> strategies;@Autowiredpublic PaymentServiceImpl(List<PaymentStrategy> paymentStrategies){this.strategies = paymentStrategies.stream().collect(Collectors.toMap(s -> s.getClass().getSimpleName().toLowerCase(), Function.identity()));}public void processPayment(String strategyName,double amount){PaymentStrategy strategy = strategies.getOrDefault(strategyName,null);if (strategy != null){strategy.pay(amount);}else {throw new IllegalArgumentException("Strategy not found" + strategyName);}}}

4、controller层的调用

import com.hysoft.study.service.impl.PaymentServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("payment")
public class PaymentController {@Autowiredprivate PaymentServiceImpl paymentService;@PostMapping("test")public void test(String paymentname,double amount){this.paymentService.processPayment(paymentname,amount);}}

说明

需要注意的是,controller层调用service层实现方法的适合,传递了参数paymentname(支付方式),这个支付方式需要提前和前端调用人员协商好,这里的名称是各种支付方式的bean名称,在service处理中已经有所体现

在这里插入图片描述
因此在这里名称传值可以是qqpayment或weixinpayment。因此传值需要提前和前端进行协商。

枚举与策略模式结合

枚举类型不仅可以用来表示一组常量,还可以定义与这些常量相关联的行为。结合策略模式,可以进一步简化代码。

1、创建枚举

public enum OrderStatus {NEW {@Overridepublic void process () {System.out.println("处理新建订单");}},PAID {@Overridepublic void process () {System.out.println("订单已支付");}},UNPAD {@Overridepublic void process() {System.out.println("订单未支付");}};public abstract void process();
}

2、service层书写处理方法

import com.hysoft.study.model.OrderStatus;
import org.springframework.stereotype.Service;@Service
public class OrderServiceImpl {public void handleOrder(OrderStatus status) {status.process();}}

3、controller层调用

import com.hysoft.study.model.OrderStatus;
import com.hysoft.study.service.impl.OrderServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("order")
public class OrderController {@Autowiredprivate OrderServiceImpl orderService;@PostMapping("test")public void test(String status){OrderStatus aNew = OrderStatus.valueOf(status);this.orderService.handleOrder(aNew);}}

4、说明

controller层调用时传输的参数status即使在枚举中的各常量,例如NEW或者PAID、UNPAD等

Lambda表达式与函数接口

以下示例在service层实现类中直接书写了不同vip等级的结算金额的逻辑
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;@Service
public class StreamServiceImpl {private final Map<String, Function<Double, Double>> discountFunctions = new HashMap<>();public StreamServiceImpl() {discountFunctions.put("VIP1", e -> e * 0.95);discountFunctions.put("VIP2", e -> e * 0.95 - 20);}public double applyDiscount(String vipname, double price) {Double apply = discountFunctions.getOrDefault(vipname, Function.identity()).apply(price);return apply;}
}

在controller层调用时,需要传入vip等级和总计算金额,计算结果时打折后金额

import com.hysoft.study.service.impl.StreamServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("stream")
public class StreamController {@Autowiredprivate StreamServiceImpl streamService;@PostMapping("test")public double test(String vipname,Double price){return this.streamService.applyDiscount(vipname,price);}}

说明

传参vipname的值应参考service层类中的vip参数

在这里插入图片描述

http://www.jinmujx.cn/news/110309.html

相关文章:

  • 东莞网页制作设计seo专员是什么职位
  • 做门的网站建设seo网站建站
  • u盘装WordPress网站seo报价
  • 高校国际交流中心网站建设方案网络营销怎么做?
  • 北京网站建设解决方案晚上免费b站软件
  • 长汀网站建设seo 专业
  • 江阴网站开发招聘海会网络做的网站怎么做优化
  • 介绍自己的网页设计作品seo网站关键词优化机构
  • 做网站的费用入什么科目优化设计
  • 网站视觉分析外贸营销平台
  • 佛山市住房和城乡建设局网站百度在线提问
  • 免费企业建网站培训行业seo整站优化
  • 手机网页加速器优化推广关键词
  • 用c 建网站时怎么做导航菜单栏站长工具域名查询
  • 做点阵纸的网站蒙牛牛奶推广软文
  • 太原网站建设方案报价关键词如何确定
  • 公司注销需要怎么办理seo职业技能培训班
  • 有源代码如何做网站网站策划方案
  • 长沙做网站哪里好十大经典口碑营销案例
  • 网站制作需要多少钱官网开网站需要多少钱
  • 网站日常更新谁做自动化测试培训机构哪个好
  • 大石桥网站建设百度免费推广网站
  • 网站代理备案 靠谱么百度账号快速注册入口
  • 怎样做企业手机网站首页品牌营销策划机构
  • 中山网站建设文化信息pc网站优化排名软件
  • 北京网站seowyhseoseo排名关键词搜索结果
  • 无限流量网站建设点点站长工具
  • 如何查询网站建设时间seo营销外包
  • wordpress顶部栏如何修改优化关键词软件
  • 东莞做网站公司首选长尾词挖掘工具