管道-过滤器模式

  如果项目中的功能要求需要经过一系列的处理。可以采用管道-过滤器模式组织这些处理。每一个处理就是一个过滤器。组织过滤器的管线对象就是管道。

  管道模式适用于一系列确定/已知的步骤处理。

原始的管道模型可以像下面这样:

 /// <summary>
    /// 处理消息
    /// </summary>
    public abstract class Context
    {
    }

    /// <summary>
    /// 过滤器
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IFilter<T> where T : Context
    {
        T Handle(T message);
    }

    /// <summary>
    /// 管道
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class PipeBase<T> where T : Context
    {
        protected IList<IFilter<T>> filter = new List<IFilter<T>>();
        public T Message { set; get; }

        public void ProcessHandle()
        {
            foreach (var s in filter)
            {
                s.Handle(Message);
            }
        }

        public void AddFilter( IFilter<T> f )
        {

        }

        public void RemoveFilter(IFilter<T> f)
        {

        }
    }

asp.net的请求事件  就是一个管道-过滤器模式,通过一系列的管道事件处理HttpContext

时间: 2024-12-25 01:39:40

管道-过滤器模式的相关文章

基于KWIC 的关键字匹配算法(管道+过滤器模式下实现)

下面是基于KWIC 的关键字匹配算法(管道+过滤器模式下实现) 关键部分的管道+过滤器 软件体系下的实现, 在很多的关键字搜索平台都使用了这一 循环移位+排序输出的 关键字匹配算法: 具体需求如下: 1.使用管道-过滤器风格: 每个过滤器处理数据,然后将结果送至下一个过滤器,.要有数据传入,过滤器即开始工作.过滤器之间的数据共享被严格限制在管道传输 四个过滤器: 输入(Input filter): 从数据源读取输入文件,解析格式,将行写入输出管道 移位(CircularShifter filte

软件架构模式之管道-过滤器模式--分析

在管道-过滤器架构模式中,每个构件都有一组输入,输出,构件读取输入的数据流,经过内部处理后,产生输出数据流,该过程主要完成输入流的变换及增量计算.这里的构件就是过滤器,而连接过滤器的就是管道,这个管道将上一个过滤器处理的结果数据流传送到下一个过滤器,在进行其他的计算. 简单来说,管道-过滤器模式结构就像是一条产品加工流水线,原材料在流水线上经过一个个工人的加工,最终生产出产品.这里的工人就是过滤器,将材料进行加工,流水线中的传送带就是管道,将一个工人加工过得材料传送给下一个工人继续加工. 应用场

【设计模式】过滤器模式

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准. 实现 我们将创建一个 Person 对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表.CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Pe

正确的输入——过滤器模式

在建造者模式中动态创建表单时,用户的输入是任意的,显然这是不允许的,我们需要过滤掉用户不合理的输入并加以提示,过滤器模式允许开发人员通过不同的标准过滤一组对象,并通过逻辑运算将他们连接起来. 实例中根据表单的要求,设计输入为空过滤器,邮箱格式过滤器,长度过滤器,并根据用户的输入给出结果,其类图结构如下: 代码实现: var Filter = Class.extend({ controls:[], ctor:function(_controls = []){ this.controls = _co

Java设计模型应用——过滤器模式

storm引擎计算出一批中间告警结果,会发送一条kafka消息给告警入库服务,告警入库服务接收到kafka消息后读取中间告警文件,经过一系列处理后把最终告警存入mysql中. 实际上,中间告警结果可能有重复告警.错误告警.无用告警,告警入库服务会过滤,压缩中间告警,把用户关心的告警存入数据库.过滤的步骤较多,并且客户关心的告警可能会随时变化,写死的告警过滤很快就无法满足应用场景,这种场景下使用过滤器模式则很好满足业务上的不确定性欲扩展性. 告警入库服务涉及消息过滤和告警过滤,下面我们以消息过滤器

【设计模式】拦截过滤器模式

拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理.定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上.过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序.以下是这种设计模式的实体. 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务. 过滤器链(Filter Chain) - 过滤器链带有多个过滤器,并在 Target 上按照定义的顺序执行这些过滤器. Targe

从真实项目中抠出来的设计模式——第二篇:过滤器模式

一:实际场景介绍 我们在给用户做订单催付通知的时候,会有这样的一种场景,用户在系统后台设置一组可以催付的规则,比如说订单金额大于xx元,非黑名单用户,来自 哪个地区,已购买过某个商品,指定某个营销活动的人等等这样的条件,如果这时用户在淘宝上下了一个订单,那程序要判断的就是看一下此订单是否满足这 些规则中的某一个,如果满足,我们给他发送催付通知,这种场景是很多做CRM的同学都会遇到的问题,那针对这种场景,如何更好的规划业务逻辑呢? 二:普通的编程代码 在这里我们就不考虑多筛选条件下的性能,而只从代

Java多线程编程实战指南(设计模式篇,黄文海)-之管道线模式

不得不说,本人工作上很少有使用多线程编程技术的地方.由于本人工作上经常使用的是类似SSH等框架搭建MVC架构,所以更加习惯于编写一些优秀程序员所唾弃的样板式的代码.最近看了文海的多线程编程实战指南,瞬间眼前一亮.觉得有很多自己可以学习的,事实上,我已经在最近的项目中使用上了那本书介绍的两相终止模式.串行封闭模式.生产者消费者模式以及线程池等技术,确实在许多方面改进了我们服务端的吞吐量.说到这里本人吐槽一下,由于是毕业后转行,目前也才工作一年还不满2个月.所以原谅我的得瑟,但我相信我以后会做的更好

结构型模式 过滤器模式

结构型模式 过滤器模式 /** * 结构型模式 过滤器模式 * 使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来. * */ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> void mytest() { return; } int main() { mytest(); system("pause"); return 0; }