代码重构之模板设计模式
作者:互联网
三个需求方案迭代讲述模板设计模式.
需求1.0:
现在需要一活动参与接口,需要来记录参与用户信息,注意:已经参与的用户不允许参与!操作成功页面需要提示用户操作成功!
实现方案1.0(伪代码)
public class Join {
public void isJoin(){
System.out.println("判断是否参与过,已经参与过则提示不允许重复参与!");
}
public void addJoinRecord(){
System.out.println("添加领取记录");
}
}
需求2.0
在原有活动线上运行的同时,现在有另一个活动也需要进行记录参加的用户信息,已经参与过的不允许参加;也就是说现在支持两种类型的活动,但处理逻辑相同.最先想到的是重新复制一份代码,毕竟copy copy 很 happy!但是都是对自己有要求的程序员而言,怎么能那么随便.我们可以新增类型,根据类型进行区分.
实现方案2.0(伪代码)
public class Join {
public void joinActivity(int type){
isJoin(type);
addJoinRecord(type);
}
public void isJoin(int type){
System.out.println("根据活动类型判断是否参与过,已经参与过则提示不允许添加!");
}
public void addJoinRecord(int type){
System.out.println("根据活动类型添加领取记录");
}
}
需求3.0
在原来两个参加活动线上运行的基础上需要第三个活动,基本的需求是记录参加用户的信息,不过允许重复领取,但是参与过前两个活动的用户不允许参与第三个活动.也就是说在第三种活动在现有的实现中需要添加新的判断处理.类似的处理可以参考模板设计模式进行实现.
- 1.定义公共活动流程骨架
- 1.1校验是否重复
- 1.2新增参与记录
- 2.对于公共活动流程中有差异化的进行抽象处理,由子类进行差异化实现(第三种活动校验是否参与过前两种活动)
实现方案3.0(伪代码):
public abstract class Join {
public final void process(){
// 查询是否参与过
isJoin();
// 新增参加记录
addJoinRecord();
}
public abstract void isJoinAnother();
public void isJoin(){
System.out.println("根据活动类型判断是否参与过,已经参与过则提示不允许添加!");
}
public void addJoinRecord(){
System.out.println("添加参与记录");
}
}
第一种或第二种活动实现:
public class OneJoin extends Join {
@Override
public void isJoinAnother() {
System.out.println("允许参加前两种活动");
}
public static void main(String[] args) {
OneJoin oneJoin = new OneJoin();
oneJoin.isJoinAnother();
oneJoin.process();
/* 输出:允许参加前两种活动
根据活动类型判断是否参与过,已经参与过则提示不允许添加!
添加参与记录*/
}
}
第三种活动:
public class ThreeJoin extends Join {
@Override
public void isJoinAnother() {
System.out.println("参加前两种活动则不允许参加第三个活动的处理");
}
public static void main(String[] args) {
ThreeJoin threeJoin = new ThreeJoin();
threeJoin.isJoinAnother();
threeJoin.process();
/*输出:参加前两种活动则不允许参加第三个活动的处理
根据活动类型判断是否参与过,已经参与过则提示不允许添加!
添加参与记录*/
}
}
总结:模板模式适用于同类型的多个业务存在相同的流程步骤场景,可以将相同的流程定义为一个流程骨架,对于流程步骤在每个业务中有差异化处理的需要子类进行自定义实现.本文中所讲述场景仅有两个公共流程步骤,可能会对模板模式公共流程骨架理解不深刻.后期想到更好的场景案例会进行重新补充.
希望本文对你有帮助,欢迎评论区留言点赞!
标签:重构,活动,参与,System,public,println,设计模式,void,模板 来源: https://blog.csdn.net/weixin_43401380/article/details/122018130