责任链或过滤器模式-使用过滤链

//过滤器接口
public interface Filter {
    public void doFilter(Request req,Response res,FilterChain c);
}
//客户端传递的内容到服务器
//模拟javaweb中的request
public class Request {  public String requestStr;  }
//服务器反馈的内容到客户端
//模拟javaweb中的response
public class Response {  public String responseStr;  }

//HTML的过滤器
public class HTMLFilter implements Filter{
    @Override
    public void doFilter(Request req, Response res,FilterChain fc) {
        req.requestStr=req.requestStr.replace("<", "[");
        req.requestStr=req.requestStr.replace(">", "]")+"--HTMLFilter";
        fc.doFilter(req, res, fc);     //在这里它会调用过滤链中的下一个filter
        //等整个过滤链处理完了之后也就是fc.doFilter(req, res, fc);这段
        //处理完了之后就会执行下面的方法了res.responseStr+="--HTMLFilter";
        //然后依次的过滤器都执行这列的这行代码,也就会变成了倒序执行
        res.responseStr+="--HTMLFilter";
    }
}  

//敏感词的过滤器
public class SensitiveFilter implements Filter{
    @Override
    public void doFilter(Request req, Response res,FilterChain fc) {
        req.requestStr=req.requestStr.replace("敏感", "mingan")+"--SensitiveFilter";
        fc.doFilter(req, res, fc);
        res.responseStr+="--SensitiveFilter";
    }
}  

//过滤器链
public class FilterChain implements Filter{
    private List<Filter> list=new ArrayList<Filter>();
    public FilterChain addfilter(Filter filter){
        list.add(filter);
        return this;
    }
    int index=0;
    @Override
    public void doFilter(Request req, Response res,FilterChain fc) {
        if(index==list.size())return;
        Filter f=list.get(index);
        index++;
        //依次执行下一个过滤器,直到整个过滤器链执行完
        f.doFilter(req, res, fc);
    }
} 

public class Client {
    /*
     * Request:客户端发送给服务端的信息
     * Response:服务端反馈给客户端的信息
     * 要实现的功能是:Request携带的信息所经过的过滤器
     * 要跟Response所携带的信息所经过的过滤器相反
     */
    public static void main(String[] args) {
        Request req=new Request();
        Response res=new Response();
        req.requestStr="这是我的一个敏感链接<a>优酷</a>";
        res.responseStr="response";
        FilterChain  fc=new FilterChain();
        fc.addfilter(new HTMLFilter());  

        FilterChain fc1=new FilterChain();
        fc1.addfilter(new SensitiveFilter());
        fc.addfilter(fc1);//在一个过滤链上面再加上一个过滤链  

        fc.doFilter(req, res,fc);
        System.out.println(req.requestStr);
        System.out.println(res.responseStr);
    }
    /**
     * 执行结果:
     * 这是我的一个mingan链接[a]优酷[/a]--HTMLFilter--SensitiveFilter
     * response--SensitiveFilter--HTMLFilter
     */
} 
时间: 2024-10-12 03:32:31

责任链或过滤器模式-使用过滤链的相关文章

Java设计模式之责任链模式、职责链模式

本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 角色 抽象处理者角色(Handler):定义出一个处理请求的接口.如果需要,接口可以定义 出一个方法以设定和返回对下家的引用.这个角色通常由一个Java抽象类或者Java接口实现. 具体处理者角色(ConcreteHan

行为型模式之职责链模式

概述 很多情况下,在一个软件系统中可以处理某个请求的对象不止一个,例如SCM系统中的采购单审批,主任.副董事长.董事长和董事会都可以处理采购单,他们可以构成一条处理采购单的链式结构,采购单沿着这条链进行传递,这条链就称为职责链.职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并让请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递

状态模式与职责链模式

在学习设计模式的时候发现状态模式与职责链模式特别的相似,当时没有能理解,现在回过头来看了看,查 了查资料,明白了一点,先把自己的理解写下来,在以后的学习继续深入学习 一.状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 类图 Context类就是用户当前定义的一个状态,而抽象状态类State就是用来解决特定状态的方法,其下有很 多的子类会针对用户定义的状态不同而选择不同的子类方法:可以说抽象类State是解决Context类的方法, 它的子类是针对不同的状态而分成

共享链新商业模式开发

共享链新商业模式开发(共享链开发-188.264.66502 微/电)共享链小程序开发.共享链平台系统开发等."我所说的,都是错的."在当下互联网购物的大潮下,中国的实体店铺面临了前所未有的巨大的考验和挑战,实体做生意的道路坎坷而艰难,许多店铺产品品质优良,服务到位,但仍门庭冷落,艰难经营,面临关门.这个时候新的理念就出来了--开发了共享链系统的"共享链商家".据我所知,张小龙前辈不是第一个说这句话的人,肯定也不会是最后一个.我们不是这个世界的唯一探索者,发生在个体

共享链小程序模式开发

移动互联网的兴起,打破了地域概念.小程序共享链商家开发找巢杰:135-3388-6017(微信同号)商业社会不断在转变的根本原因还是社会在变化,人类生产力与生产关系在变化.世界说变就变,模式说火就火,我们做的不是跟风,而是抓住机遇,最近互联网流行: 站在风口上,连猪都能飞起来. 共享经济,一般是指以获得一定报酬为主要目的,基于陌生人且存在物品使用权暂时转移的一种新的经济模式.其本质是整合线下的闲散物品.劳动力.教育医疗资源.有的也说共享经济是人们公平享有社会资源,各自以不同的方式付出和受益,共同

小程序共享链开发系统模式

小程序共享链平台,小程序共享链软件(陈琦:138-2848-7919可微)小程序共享链模式,小程序共享链APP,小程序共享链定制,小程序共享链商城,小程序共享链开发,小程序共享链定制,共享链商家"基于区块链技术理念而开发,以消费奖励的方式,让消费者重复消费,主动分享,持续关注.达到提升商家销量的目. --共享链具体做什么-- 举例,顾客到某水果店购买商品后通过共享链支付成功后进入共享链小程序,该小程序里面会显示消费者的消费金额,奖励金额和已经到账金额,之后其他消费者也到该水果店消费,那共享链系统

IBM Think 2018:用区块链新商业模式激活新经济

2018年1月17日,全球最大的集装箱运输及物流服务商之一丹麦马士基集团与IBM宣布双方组建合资公司,联合开发和推广基于区块链的全球贸易数字化平台(Global Trade Digitization Platform,以下简称GTD),供全球航运生态参与.以此为标志,2018将有望成为区块链正式商用启动年. 在2018年3月20日的IBM Think 2018上,新成立的合资公司CEO Michael J. White表示,全球贸易与运输行业向来发展十分强劲,过去5年的年均增长为3.7%,未来两

酒链世界平台开发区块链商城系统模式

酒链世界平台开发区块链商城系统模式,陈会:137.1026.0445(可微可电)酒链世界平台APP开发,酒链世界区块链商城开发,酒链世界分销返利模式开发,酒链世界软件开发定制开发. 首先酒链世界是酒品F2C直购平台.F指的是酒厂厂家,C是消费者.在酒链世界App的内置商城,消费者可以用数字资产"圣酒"兑换酒品,也可以现金购买.厂家收到消费者订单后,直接将酒水从工厂快递邮寄,厂家直销,消除中间环节,保证源头正宗. 再就是酒品广告分发平台. 以往的DSP广告,广告主最困惑之处在于,不知道到

区块链交易所系统模式发展趋势分析

比特币带动了区块链概念的诞生,区块链技术也让数字资产在近几年高速发展.区块链交易所作为各种数字资产币的"中转站",整个区块链生态中不可或缺的一部分,未来的发展趋势必然是全方位的,区块链交易所未来发展趋势是怎样的呢?在今年央视"对话"中给区块链行业释放了不少信号(1)国内的中心化交易平台依然存在政策风险.去中心化的交易所将是未来趋势(2)国内警惕"三无币"泡沫,区块链技术结合应用将是趋势(3)为获得数字资产定价权与寻求最佳监管方式,国家可能成立自己