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、这里的工厂模式和适配器模式主要是面向接口进行设计,主要是取决于业务需求,千万不要为了使用设计模式而使用。

原创粉丝点击