本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
网上写工厂模式的书籍和博客一大堆,看似好多人都熟悉,但其实他们都对工厂模式很陌生,因为他们都不会应用。学而不用,还不如不学!
我也在群里问过很多人,别说工厂模式了,23 种设计模式我都看过。书都看了好几遍了,但是没有真正使用过。
一个工作过 4 年的程序员告诉我,他学设计模式只为了面试,因为工作中你不使用设计模式也没人考核你的 kpi。这和我们现代的教育有些类似哈,学习只为了考试!
所以,为了更好的完成面试,我给大家讲一讲工厂模式在实际项目中的应用。
项目中最常见的工厂模式就是 DAO 层,Service 层的封装。这个大家可能都知道,我就不在细说了,我列举两种可以使用工厂模式,但是可能你们又没有使用工厂模式的场景。当然我这里指的是我们的电商系统。
第一种最常见的应用场景就是报表系统的报表导出。领导要求,每天定时导出一些报表文件,通过邮件的形式抄送给某些对应的领导或管理人员。那我们就使用了工厂模式,抽象工厂方法。
为什么要这样设计呢?因为鬼知道领导哪天抽风,再增加什么类型的报表。所以为了更好的、更快的响应,并且设计的符合开闭原则。
生产报表事件:
// 订单报表 ReportEvent reportEvent = ReportEventFactory.getReportEvent(OrderReportEvent.class,parameter); // 支付报表 ReportEvent reportEvent = ReportEventFactory.getReportEvent(PaymentReportEvent.class,parameter); // 发货报表 ReportEvent reportEvent = ReportEventFactory.getReportEvent(DeliverReportEvent.class,parameter); // 库存报表 ReportEvent reportEvent = ReportEventFactory.getReportEvent(StockReportEvent.class,parameter); // 评论报表 ReportEvent reportEvent = ReportEventFactory.getReportEvent(CommentReportEvent.class,parameter); ......
将事件放到队列里:
boolean add = reportQueue.add(reportEvent);
取出报表事件,执行操作:
ReportEvent reportEvent = reportQueue.poll(); if (reportEvent != null) { threadPoolTaskExecutor.execute(reportEvent); }
在报表系统中,存在着一个报表生成事件工厂,每个事件实现 run 接口,实现具体的报表生成操作。
第二种场景就是我们的电商系统中的评论了。你提交一次评论,需要经过我们的整个评论工厂处理。处理你的个人信息是否在黑名单中;判断你是否是恶意刷评论;评论是否有敏感词等。
比如,是否匿名。是匿名评论,通过获取对应实例进行匿名处理。
除了这些还有很多的使用场景。比如,你的个人积分达到 3000 积分,获得对应等级的礼包;达到 5000 积分获得不同的礼包,以此类推。
工厂模式在编码中普遍存在。比如:dubbo、Spring、Mybatis、Hibernate 等框架中都普遍存在!
最后记住,学会了一定要使用!
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » 工厂模式在电商系统中的应用实战