zoukankan      html  css  js  c++  java
  • 《设计模式三》责任链模式和装饰器模式

    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 装饰器模式解决方案

    装饰器模式,就是例如在原有的东西上面加装饰:

    1. PersonDecorator类中添加Person属性
    Public class PerionDecorator {
        Persion p;
        public Person getPerson {
            p = new Person();
            // 增加装饰
            p.setColor();
            return p;
        }
    }
    
  • 相关阅读:
    Windows 2008 R2 安装 Windows phone 7 开发环境
    win 7,win2008 无法给新建用户完全权限
    基于Ajax的Asp.Net 简易在线聊天室
    phpwind ecshop 用户整合
    UVALive 3942 Remember the Word(字典树+DP)
    UVA 11732 strcmp() Anyone? (压缩版字典树)
    UVA 11992 Fast Matrix Operations(线段树:区间修改)
    hdu 2222 Keywords Search(AC自动机模版题)
    动态规划基础练习笔记
    递归与分治策略基础练习笔记
  • 原文地址:https://www.cnblogs.com/darope/p/12695256.html
Copyright © 2011-2022 走看看