模板方法设计模式
模板方法设计模式
1.说明
核心是:定义一个模板类,在模板类中规定其整体的骨架并确定哪些方法是允许子类可以去重写的,哪些是不允许子类去重写的.用来保证核心算法不被破坏.
2.修饰词说明
修饰词 | 使用位置 | 说明 |
---|---|---|
final | 修饰方法 | 定义那些不想被子类重写的方法,常见于定义整体的数据流转结构 |
abstract | 修饰方法 | 定义那些需要子类去具体实现的方法 |
3.代码范例
模板类(抽象类)
@Component
public abstract class AbstractResGroupManageService implements ResGroupManageService {
/**
* 不允许子类去重写的,必须要用父类提供的功能逻辑
**/
public final void saveOrUpdateResGroupAndRules(AlarmDescDetailsDto request) {
saveOrUpdateResGroup(request);
saveOrUpdateAlarmRules(request);
saveOrUpdateAppInfoRelation(request);
saveOrUpdateMemberRelation(request);
saveInstanceCount(request);
}
/**
* 必须子类去实现的,父类不提供功能
**/
abstract void saveOrUpdateResGroup(AlarmDescDetailsDto request);
abstract void saveInstanceCount(AlarmDescDetailsDto request);\
abstract void saveOrUpdateAppInfoRelation(AlarmDescDetailsDto request);
abstract void saveOrUpdateMemberRelation(AlarmDescDetailsDto request);
}
4.扩展
使用到了抽象类abstractClass,刚好说明在使用模板方法的设计模式时时候抽象类,而不使用接口
如果接口中指定必须实现的方法,和可选实现的方法,怎么操作
可以参考javax.servlet中的Filter过滤器接口设计,必须实现的方法不加任何修饰,可选实现的方法加个default修饰符,当类需要去实现接口的时候,就可以实现或者不实现.达到这种效果.
修饰符 | 编写位置 | 说明 |
---|---|---|
default | 接口中的方法 | 修饰方法的时候,实现类可以不需要去实现它 |
public interface Filter {
default void init(FilterConfig filterConfig) throws ServletException {
}
void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
default void destroy() {
}
}
5.优势,好处
用到了编程中的抽象的思想,去设计好整体的骨架.这是核心
原创:做时间的朋友