设计模式2,模板方法
适用场景
适用于固定逻辑的算法,但是里面的某些步骤是变化的。
举例
刷脸发送短信:学生->家长,访客->邀请人,家长->班主任)(注:学生->家长 ,表示学生刷脸发送给家长)
逻辑:查询刷脸的人员 -> 查询短信要发送给谁 -> 短信模板 -> 发送短信
模板
/** * @Auther: ZhangSuchao * @Date: 2020/4/27 10:03 */ public abstract class SendMsgTemplate { protected Integer userId; //刷卡用户 protected Date inoutDate; //刷卡时间 private SendMsgTemplate() { } public SendMsgTemplate(Integer userId, Date inoutDate) { this.userId = userId; this.inoutDate = inoutDate; } /** * 发送短信 * * @return */ public boolean sendMsg() { boolean needSendMsg = needSendMsg(); if (!needSendMsg) return true; List<User> userList = select2User(); String msg = msg(); return trueSendMsg(userList, msg); } // 是否需要发送消息 abstract boolean needSendMsg(); // 查询要要送的用户 abstract List<User> select2User(); // 查询要发送的消息 abstract String msg(); abstract boolean trueSendMsg(List<User> userList, String msg); }
子类继承该抽象类,实现其中的方法即可
好处
避免过多的判断,逻辑清晰