1.6 责任链模式
使用场景:例如在论坛上发表文章上传到服务器,我们要进行脱敏,检查是否有黑客代码等,需要进行过滤。如果过滤都写在一块,一方面不方便扩展,一方面代码臃肿(有可能每一种过滤的代码特别多)
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);
}
}
}
- 定义自己不同的Filter,链接成链过滤
1.7 装饰器模式-Decorator
1.7.1 传统方式替代方案
- 如果不了解装饰器模式,那么要在原有东西上面加装饰,直观上就是继承,比如美国人继承人,黑色美国人继承美国人等,大量的继承人会产生类爆炸
- 装饰器模式常被用在图形界面的解决方案中,例如把某个东西加点样式等
1.7.2 装饰器模式解决方案
装饰器模式,就是例如在原有的东西上面加装饰:
Public class PerionDecorator {
Persion p;
public Person getPerson {
p = new Person();
// 增加装饰
p.setColor();
return p;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。