
if…else控制语句 , 如果代码里滥用会大大降低代码的可读性、可维护性、可扩展性以及灵活性 , 进而使整个软件系统造成危害 。因为在实际的项目中 , 需求往往是不断变化的 , 新需求也层出不穷 , 因此违反了违反单一职责原则和开闭原则 , 而且有些公司的代码审查会通不过 。
所以 , if else的替代方案是很有必要的 , 如位语句 , 枚举 , 工厂模式 , 策略模式 , 状态模式等等 。这里用一个场景详细说明if else的替代方案 , 大家用支付宝付款的时候 , 会有多种付款方式 , 如余额 , 花呗 , 余额宝 , 信用卡 , 银行卡 。
01. 传统的方式
public class PayDemo {public String pay(String payType) {String pay = \”\”;if (\”1\”.equals(payType)) {pay = \”支付宝余额支付\”;} else if (\”2\”.equals(payType)) {pay = \”支付宝余额宝支付\”;} else if (\”3\”.equals(payType)) {pay = \”支付宝花呗支付\”;} else {pay = \”其他支付\”;}//…System.out.println(pay);return pay;}}public class PayTest {public static void main(String[] args) {PayDemo payDemo = new PayDemo;payDemo.pay(\”1\”);payDemo.pay(\”2\”);payDemo.pay(\”3\”);payDemo.pay(\”4\”);}}
【余额宝转出到银行卡要手续费吗 yuebao】枚举第一种
(1)面向接口编程 , 首先定义一个支付接口
public interface PayEnum {String pay;}
(2)定义一个具体的支付宝余额实现
public class PayEnumByBalance implements PayEnum{@Overridepublic String pay {System.out.println(\”支付宝余额支付\”);return \”支付宝余额支付\”;}}
(3)定义一个具体的支付宝花呗实现
public class PayEnumByHuabei implements PayEnum {@Overridepublic String pay {System.out.println(\”支付宝花呗支付\”);return \”支付宝花呗支付\”;}}
(4)定义一个具体的支付宝余额宝实现
public class PayEnumByYuEBAO implements PayEnum {@Overridepublic String pay {System.out.println(\”支付宝余额宝支付\”);return \”支付宝余额宝支付\”;}}
(5)定义一个枚举类
public enum PayTypeEnum {PAY_BALANCE(\”1\”,new PayEnumByBalance),PAY_HUABEI(\”2\”,new PayEnumByHuabei),PAY_YUEBAO(\”3\”,new PayEnumByYuEBAO);private String payType;private PayEnum payEnum;PayTypeEnum(String payType, PayEnum payEnum) {this.payType = payType;this.payEnum = payEnum;}public static PayEnum getPay(String payType){for (PayTypeEnum payTypeEnum : PayTypeEnum.values) {if (payTypeEnum.payType.equals(payType)) {return payTypeEnum.payEnum;}}return new PayEnumByBalance;}}
(6)客户端
public class PayEnumTest {public static voidmain(String[] args) {PayEnum payEnum = PayTypeEnum.getPay(\”1\”);payEnum.pay;PayEnum payEnum1 = PayTypeEnum.getPay(\”2\”);payEnum1.pay;PayEnum payEnum2 = PayTypeEnum.getPay(\”3\”);payEnum2.pay;}}
(7)结果:
(8)总结:完全消除了if else
枚举第二种
(1) 面向接口编程 , 首先定义一个支付接口
public interface PayEnum1 {String pay;}
(2)定义一个枚举类 , 并且实现支付接口
public enum PayTypeEnum1 implements PayEnum1{PAY_TYPE_BALANCE{@Overridepublic String pay {System.out.println(\”支付宝余额支付\”);return \”支付宝余额支付\”;}},PAY_TYPE_HUABEI{@Overridepublic String pay {System.out.println(\”支付宝花呗支付\”);return \”支付宝花呗支付\”;}},PAY_TYPE_YUEBAO{@Overridepublic String pay {System.out.println(\”支付宝余额宝支付\”);return \”支付宝余额宝支付\”;}};}
推荐阅读
- 支付宝账号为什么是qq邮箱 什么是qq邮箱
- 山药木耳可以一起吃吗宝宝 山药和木耳能一起吃吗
- 玉米和南瓜能一起吃吗宝宝 南瓜和玉米能一起吃吗
- 原神须弥史莱姆隐藏宝箱在哪-原神须弥史莱姆隐藏宝箱位置介绍
- 暖宝宝轻微烫伤怎么办,用暖宝宝烫伤后的注意事项
- 天天用暖宝宝暖小肚子 原来用暖宝宝暖小肚子有这么多好处!
- 比目鱼是多宝鱼吗
- 宝人拖鞋股票 宝人拖鞋
- 淘宝直播上架宝贝怎么弄
- 2022淘宝天猫双11活动分几波持续到几号