23种设计模式——工厂模式+适配器模式实战
来源:互联网 发布:怎么算 网络淫秽色情 编辑:程序博客网 时间:2024/06/10 03:12
业务需求,需要对不同的浏览器返回不同的url地址
例如: Chrom浏览器返回:’http://www.chrom.com‘, IE浏览器返回:’http://www.ie.com’
1、根据这个业务需求,自然想到用工厂模式和适配器模式相结合方式解决
(1)工厂类
package com.xinrui.code.url.handler;public class UrlTranslateFactory { /** * 适配器工厂,根据浏览器类型返回不同的适配器实现类 * * @param version * @return */ public UrlAdapter getUrlAdapter(String version) { switch (version) { case "IE": return new IEUrlAdapterImpl(); case "Chrom": return new ChromUrlAdapterImpl(); default: return new IEUrlAdapterImpl(); } }}
(2)需要适配的实体类
package com.xinrui.code.url.handler;public class UrlBean { private String IEUrl; private String chromUrl; private String url; public String getIEUrl() { return IEUrl; } public void setIEUrl(String iEUrl) { IEUrl = iEUrl; } public String getChromUrl() { return chromUrl; } public void setChromUrl(String chromUrl) { this.chromUrl = chromUrl; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; }}
(3)适配器类
package com.xinrui.code.url.handler;public interface UrlAdapter { /** * 适配器,对urlBean进行适配 * * @param urlBean */ public void translate(UrlBean urlBean);}
(4)适配器实现类
package com.xinrui.code.url.handler;public class ChromUrlAdapterImpl implements UrlAdapter { /** * 适配器实现类,对Chrom浏览器进行适配 */ @Override public void translate(UrlBean urlBean) { urlBean.setUrl(urlBean.getChromUrl()); }}
package com.xinrui.code.url.handler;public class IEUrlAdapterImpl implements UrlAdapter { /** * 适配器实现类,对IE浏览器进行适配 */ @Override public void translate(UrlBean urlBean) { urlBean.setUrl(urlBean.getIEUrl()); }}
(5)控制层使用适配器
package com.xinrui.code.url.handler;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestHeader;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.xinrui.code.bean.BaseResultModel;@Controller@RequestMapping(value = "/url")public class UrlController { @Autowired private UrlTranslateFactory urlTranslateFactory; @RequestMapping(value = "/get") @ResponseBody public BaseResultModel getUrl(@RequestHeader(value = "version", defaultValue = "version") String version) { // 数据库取得实体类,此处省略,直接使用 UrlBean urlBean = new UrlBean(); urlBean.setChromUrl("http://www.chrome.com"); urlBean.setIEUrl("http://www.ie.com"); BaseResultModel baseResultModel = new BaseResultModel(); UrlAdapter urlAdapter = urlTranslateFactory.getUrlAdapter(version); urlAdapter.translate(urlBean); baseResultModel.setValue(urlBean); return baseResultModel; } /** * 根据不同的浏览器返回不同的url地址 */ public static void main(String[] args) { // 设置url实体类 UrlBean urlBean = new UrlBean(); urlBean.setChromUrl("http://www.chrome.com"); urlBean.setIEUrl("http://www.ie.com"); UrlTranslateFactory urlTranslateFactory = new UrlTranslateFactory(); // 浏览器为IE浏览器 String version = "IE"; UrlAdapter urlAdapter = urlTranslateFactory.getUrlAdapter(version); urlAdapter.translate(urlBean); System.out.println("url=" + urlBean.getUrl()); // 浏览器为Chrom浏览器 String version1 = "Chrom"; UrlAdapter urlAdapter1 = urlTranslateFactory.getUrlAdapter(version1); urlAdapter1.translate(urlBean); System.out.println("url=" + urlBean.getUrl()); } /** * 业务需求,需要对不同的浏览器返回不同的url地址,例如: Chrom浏览器返回:'http://www.chrom.com' * IE浏览器返回:'http://www.ie.com' */}
(6)控制台输出
url=http://www.ie.com url=http://www.chrome.com
2、这里的工厂模式和适配器模式主要是面向接口进行设计,主要是取决于业务需求,千万不要为了使用设计模式而使用。
阅读全文
0 0
- 23种设计模式——工厂模式+适配器模式实战
- 设计模式(工厂模式、适配器模式)
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- Java的动态代理
- Eclipse 无法打断点问题-遇到带斜杠的断点图标
- npm镜像下载
- D. Multiplication Table 448D
- OpenStack架构学习笔记2017-11-16
- 23种设计模式——工厂模式+适配器模式实战
- sass使用指南
- IntegerToRoman
- 数据清洗(二)——缺失值处理
- Android Studio查看Gradle版本
- 系统间通信方式之(ActiveMQ的集群方案介绍结束)(十八)
- 使用Android studio个人总结
- 12 OF 100DAYS
- Mac中Java 配置maven及阿里云镜像