• 《设计模式三》责任链模式和装饰器模式


    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;
        }
    }
    
  • 相关阅读:
    ThroughRain第一次冲刺个人总结
    【操作系统】实验四 主存空间的分配和回收
    学习回顾与总结
    关于学术诚信与职业道德的承诺
    sprint个人总结+读书博客
    实验三 进程调度模拟程序
    团队项目3.0
    软件改进
    团队项目项目:二次开发
    作业调度
  • 原文地址:https://www.cnblogs.com/darope/p/12695256.html
Copyright © 2020-2023  润新知