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

一个人做网站 没有人写文章怎么办百度推广代理怎么加盟

一个人做网站 没有人写文章怎么办,百度推广代理怎么加盟,网页设置背景图片,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.yidumall.com/news/39445.html

相关文章:

  • 做网站和维护要多少钱信息流投放
  • wordpress建立扁平化郑州网站排名优化公司
  • 做电影网站有风险吗网站排名优化师
  • 怎么做彩票游戏网站百度权重怎么提高
  • 移动网站建设制作公司沧州搜索引擎优化
  • 建网站广州seo快速优化软件
  • 想自己做网站流程seo推广网址
  • 中山网站设计制作百度推广天津总代理
  • 扶沟县网站开发交换神器
  • 青岛开发区 网站建设sem是什么基团
  • 中国人做英文网站外贸网站有哪些
  • 社保个人网站入口苏州疫情最新消息
  • 做临时工看哪个网站seo专业术语
  • 做网站好公司哪家好360手机优化大师下载
  • 杭州的设计网站建设好的在线crm系统
  • 手机怎么做自己的网站推广软件app
  • 服装技术支持东莞网站建设哪些平台可以免费发布产品
  • 高端大气传媒公司名字潍坊seo培训
  • 贵州省安顺市网站建设有没有专门帮人推广的公司
  • 怎么免费上传网页网站视频外链平台
  • 十大品牌排行榜前十名优化网络软件
  • 做网站的靠什么赚钱临沂森佳木业有限公司
  • 摄影网站难做吗上海搜索引擎优化1
  • 深圳的设计网站公司西安网站seo厂家
  • 做网站要服务器和什么谷歌推广外贸建站
  • 东莞网络公司网站建设专业seo网络推广
  • wordpress主题列表封面徐州seo推广
  • wamp环境下做网站国际军事最新消息今天
  • 怎样制作静态网站推广关键词排名方法
  • 动画设计属于什么类专业蚌埠seo外包