电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java如何利用策略模式替代if/else語句

瀏覽:2日期:2022-08-23 16:23:01

平時在開發中避免不了使用大量的if else語句,但過多層的if else對于性能有很大的開銷,類似如下代碼

public class MainStart { public static void main(String[] args) { String msgid = 'MS066'; if(message.equals('MS066')){ System.out.println('MS066'); }else if (message.equals('MS034')){ System.out.println('MS034'); }else if (message.equals('MS064')){ System.out.println('MS064'); }else{ System.out.println('no msgid!'); } }}

上邊代碼只是示例,實際情況可能不止4層

策略模式是一種解耦的方法,它對算法進行封裝,使得算法的調用和算法本身分離。使用策略模式客戶端代碼不需要調整,算法之間可以互相替換,因為不同的算法實現的是同一個接口。將上面的代碼優化后變為:

public class MainStart { public static void main(String[] args) { OrderDictController controller=new OrderDictController(); String msgid = 'MS066'; MsgInterface msgInterface=MsgContext.getInstance(msgId); msgInterface.manage(msg,controller); }}

實現策略模式需要以下幾個步驟:

1.定義接口

import java.sql.SQLException;import org.dom4j.DocumentException;import com.huc.controller.OrderDictController;public interface MsgInterface { public void manage(String msg, OrderDictController controller) throws DocumentException, SQLException;}

2.實現接口,重寫處理邏輯

package com.huc.msg.imp;import java.sql.SQLException;import org.dom4j.DocumentException;import com.huc.controller.OrderDictController;import com.huc.msg.MsgInterface;public class MS003 implements MsgInterface{ @Override public void manage(String msg, OrderDictController controller) throws DocumentException, SQLException { controller.manageMs003(msg); }}

package com.huc.msg.imp;import java.sql.SQLException;import org.dom4j.DocumentException;import com.huc.controller.OrderDictController;import com.huc.msg.MsgInterface;public class MS028 implements MsgInterface{ @Override public void manage(String msg, OrderDictController controller) throws DocumentException, SQLException { controller.manageMs028(msg); }}

寫兩個作為例子,可根據情況自行擴展實現類

3.定義策略上下文,根據msgid獲取對象實例

package com.huc.msg;import java.util.Map;public class MsgContext { public static MsgInterface getInstance(String msgId){ MsgInterface inter=null; Map<String, String> allClazz = MsgEnum.getAllClazz(); String clazz = allClazz.get(msgId); if (msgId!=null&&msgId.trim().length()>0) { try {try { inter = (MsgInterface) Class.forName(clazz).newInstance();//調用無參構造器創建實例} catch (InstantiationException e) { e.printStackTrace();} catch (IllegalAccessException e) { e.printStackTrace();} } catch (ClassNotFoundException e) {e.printStackTrace(); } } return inter; }}

在這一步驟中,我們需要一種方式可以根據msgid來反射獲取對象的實例,這里使用枚舉來維護二者的對應關系。

package com.huc.msg;import java.util.HashMap;import java.util.Map;public enum MsgEnum { MS066('MS066', 'com.huc.msg.imp.MS066'), MS034('MS034', 'com.huc.msg.imp.MS034'), MS064('MS064', 'com.huc.msg.imp.MS064'), MS028('MS028', 'com.huc.msg.imp.MS028'), MS003('MS003', 'com.huc.msg.imp.MS003'), MS062('MS062', 'com.huc.msg.imp.MS062'), MS154('MS154', 'com.huc.msg.imp.MS154'), MS153('MS153', 'com.huc.msg.imp.MS153'), MS033('MS033', 'com.huc.msg.imp.MS033'); private String msgid; private String clazz; public static Map<String, String> getAllClazz() { Map<String, String> map = new HashMap<String, String>(); for (MsgEnum msgEnum : MsgEnum.values()) { map.put(msgEnum.getMsgid(), msgEnum.getClazz()); } return map; } MsgEnum(String msgid, String clazz) { this.msgid = msgid; this.clazz = clazz; } public String getMsgid() { return msgid; } public void setMsgid(String msgid) { this.msgid = msgid; } public String getClazz() { return clazz; } public void setClazz(String clazz) { this.clazz = clazz; }}

在上面的代碼中,getAllClazz()方法用于獲取所有message和對應處理類的映射關系。至此策略模式優化就已經完成了,運行MainStart可以看到運行結果。

以上就是Java如何利用策略模式替代if/else語句的詳細內容,更多關于Java 策略模式的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 杭州成人高考_浙江省成人高考网上报名 | 奥因-光触媒除甲醛公司-除甲醛加盟公司十大品牌| 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 石英砂矿石色选机_履带辣椒色选机_X光异物检测机-合肥幼狮光电科技 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 自动化改造_智虎机器人_灌装机_贴标机-上海圣起包装机械 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 预制围墙_工程预制围墙_天津市瑞通建筑材料有限公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 影合社-影视人的内容合作平台 | 杭州|上海贴标机-百科| 水轮机密封网 | 水轮机密封产品研发生产厂家 | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | 精密冲床,高速冲床等冲压设备生产商-常州晋志德压力机厂 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 板式换热器_板式换热器价格_管式换热器厂家-青岛康景辉 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 沈阳真空机_沈阳真空包装机_沈阳大米真空包装机-沈阳海鹞真空包装机械有限公司 | HEYL硬度计量泵-荧光法在线溶解氧仪-净时测控技术(上海)有限公司 | 车载加油机品牌_ 柴油加油机厂家| 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 猎头招聘_深圳猎头公司_知名猎头公司 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 烘干设备-热泵烘干机_广东雄贵能源设备有限公司 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 辐射仪|辐射检测仪|辐射巡测仪|个人剂量报警仪|表面污染检测仪|辐射报警仪|辐射防护网 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 |