博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实战重构工厂模式
阅读量:4987 次
发布时间:2019-06-12

本文共 4959 字,大约阅读时间需要 16 分钟。

工厂模式

实战

待优化业务逻辑代码
/** * @author sunyang * @date 2019/1/30 10:32 */public class BizUser {    public String getShowMoreNum(Long showNumRedis) {        String  result= String.valueOf(showNumRedis);        if (showNumRedis >= 10 && showNumRedis <= 99){            String code = String.valueOf(showNumRedis);            String first = code.substring(0, 1);            result = first + "0+";        }else if (showNumRedis >= 100 && showNumRedis <=999){            String code = String.valueOf(showNumRedis);            String first = code.substring(0, 1);            result = first + "00+";        }else if (showNumRedis >= 1000 && showNumRedis <=9999){            String code = String.valueOf(showNumRedis);            String first = code.substring(0, 1);            result = first + "000+";        }else if (showNumRedis > 9999){            result = "9999+";        }else{            result= String.valueOf(showNumRedis);        }        return result;    }}
分析

从代码看的出来,不同条件下,执行的逻辑是不同的,可以把这种执行逻辑抽象出来,用多态的概念来定义不同的执行方式。

/** * 工厂模式 * 从代码看的出来,不同的条件下,执行的逻辑是不同的,那么可以把这种执行逻辑抽象出来 * 用多态的概念来定义不同的执行方式 * * @author sunyang * @date 2019/1/30 10:51 */public abstract class AbstractBizUser2 {    /**     * 处理展示     * @param showNumRedis 展示数量     * @return     */    public abstract String process(Long showNumRedis);}
/** * @author sunyang * @date 2019/1/30 10:57 */public class ShowOneExecutor extends AbstractBizUser2{    @Override    public String process(Long showNumRedis) {        String result;        String code = String.valueOf(showNumRedis);        String first = code.substring(0, 1);        result = first + "0+";        return result;    }}
/** * @author sunyang * @date 2019/1/30 11:07 */public class ShowTwoExecutor extends AbstractBizUser2 {    @Override    public String process(Long showNumRedis) {        String result;        String code = String.valueOf(showNumRedis);        String first = code.substring(0, 1);        result = first + "00+";        return result;    }}
/** * @author sunyang * @date 2019/1/30 11:09 */public class ShowThreeExecutor extends AbstractBizUser2 {    @Override    public String process(Long showNumRedis) {        String result;        String code = String.valueOf(showNumRedis);        String first = code.substring(0, 1);        result = first + "000+";        return result;    }}
/** * @author sunyang * @date 2019/1/30 11:09 */public class ShowFourExecutor extends AbstractBizUser2 {    @Override    public String process(Long showNumRedis) {        String result;        result = "9999+";        return result;    }}
/** * @author sunyang * @date 2019/1/30 11:10 */public class ShowOtherExecutor extends AbstractBizUser2 {    @Override    public String process(Long showNumRedis) {        String result;        result= String.valueOf(showNumRedis);        return result;    }}
/** * 定义一个工厂来把需要处理逻辑给包起来 * * @author sunyang * @date 2019/1/30 11:21 */public class ExecutorFactory {    public AbstractBizUser2 getExecutor(Long showNumRedis){        if (showNumRedis >= 10 && showNumRedis <= 99){            return new ShowOneExecutor();        }else if (showNumRedis >= 100 && showNumRedis <=999){            return new ShowTwoExecutor();        }else if (showNumRedis >= 1000 && showNumRedis <=9999){            return new ShowThreeExecutor();        }else if (showNumRedis > 9999){            return new ShowFourExecutor();        }else{            return new ShowOtherExecutor();        }    }}
结论
/** * @author sunyang * @date 2019/1/30 10:32 */public class BizUser {    public String getShowMoreNum(Long showNumRedis) {        /*String  result= String.valueOf(showNumRedis);        if (showNumRedis >= 10 && showNumRedis <= 99){            String code = String.valueOf(showNumRedis);            String first = code.substring(0, 1);            result = first + "0+";        }else if (showNumRedis >= 100 && showNumRedis <=999){            String code = String.valueOf(showNumRedis);            String first = code.substring(0, 1);            result = first + "00+";        }else if (showNumRedis >= 1000 && showNumRedis <=9999){            String code = String.valueOf(showNumRedis);            String first = code.substring(0, 1);            result = first + "000+";        }else if (showNumRedis > 9999){            result = "9999+";        }else{            result= String.valueOf(showNumRedis);        }        return result;*/        ExecutorFactory executorFactory = new ExecutorFactory();        AbstractBizUser2 bizUser2 = executorFactory.getExecutor(showNumRedis);        return bizUser2.process(showNumRedis);    }}
/** * @author sunyang * @date 2019/1/30 12:32 */public class BizUserDemo {    public static void main(String[] args) {        long showNum = 1111;        BizUser bizUser = new BizUser();        String result = bizUser.getShowMoreNum(showNum);        System.out.println("工厂模式实战后的结果 result:" + result);    }}

 

题外话

实战中的代码是简单可公开的逻辑代码

举一反三,去改造看不下去的代码

转载于:https://www.cnblogs.com/sunyk/p/10337749.html

你可能感兴趣的文章
1019. 数字黑洞(pat乙)
查看>>
学习 MFC之 工具栏(二)
查看>>
No refresh dropdownlist using xmlhttp callback
查看>>
19、AJAX
查看>>
NTP时间服务器的配置
查看>>
js011-DOM扩展
查看>>
JPA api 学习
查看>>
C#JWT验证
查看>>
Java transient关键字使用小记
查看>>
图片轮播
查看>>
PAT 乙级 1077
查看>>
代码格式化工具 CodeMaid
查看>>
PHP提取url
查看>>
json详解
查看>>
iphone开发我的新浪微博客户端-用户登录账号添加篇(1.5)
查看>>
MySQL总结01
查看>>
LeetCode ZigZag Conversion
查看>>
STL Vector详解
查看>>
JAVA调用基站云接口调用实例
查看>>
Asp.Net MVC的路由
查看>>