使用场景:例如在论坛上发表文章上传到服务器,我们要进行脱敏,检查是否有黑客代码等,需要进行过滤。如果过滤都写在一块,一方面不方便扩展,一方面代码臃肿(有可能每一种过滤的代码特别多)
public static void main(String[] args) {
Msg msg = new Msg();
msg.setMsg("大家好,<script> , 欢迎来到我的网站,大家都是hapi");
List<Filter> filters = new ArrayList<>();
filters.add(new HTMLFilter());
filters.add(new SensitiveFilter());
// 责任链里面的所有方法都需要处理过滤操作
for(Filter f : filters) {
f.doFilter(msg);
}
}
interface Filter{
void doFilter(String msg);
}
class HTMLFilter inplaments Filter{
void doFilter(String msg) {
// TODO
}
}
class SensitiveFilter inplaments Filter{
void doFilter(String msg) {
// TODO
}
}
最终达到这种效果:msg -> filter1 -> filter2 -> DB
最终的责任链:
class FilterChain{
List<Filter> filters = new ArrayList<>();
// 增加链条
public void add(Filter filter){
filters.add(f);
}
// 进行链式过滤
public void doFilter(Msg m){
for(Filter f : filters) {
f.doFilter(m);
}
}
}
装饰器模式,就是例如在原有的东西上面加装饰:
Public class PerionDecorator {
Persion p;
public Person getPerson {
p = new Person();
// 增加装饰
p.setColor();
return p;
}
}
原文:https://www.cnblogs.com/darope/p/12695256.html