我想创建一个过滤器对象,从上下文中过滤和删除所有内容,如html标签。但我希望它是独立的,这意味着我可以应用的设计模式将帮助我在将来添加更多的过滤器而不影响当前的代码。我认为抽象工厂,但它似乎不会按我想要的方式工作。所以也许建设者,但它看起来一样。我不知道我有点困惑,有人请给我推荐一种可以解决我的问题的设计模式,但在此之前,让我详细解释一下这个问题。设计模式推荐过滤选项
可以说我有一个有说明字段或属性的类。我需要过滤器来从这个Description属性中移除我想要的东西。所以,无论何时应用过滤器,我都可以在底层添加更多过滤器。因此,不必重新触摸说明字段,我可以轻松添加更多过滤器,并且所有过滤器都将运行到“描述”字段,并删除它们应该从“描述”上下文中删除的任何内容。
我希望我能描述我的问题。我想你们有些人之前遇到过同样的情况。
在此先感谢...
编辑:
其实我是想创建过滤器的类型/类,而不是常规的方法或什么的。像:
class TextFilter : IFilter
{
private string something;
public string Awesome {get;set;}
public string FilterYo(string textFiltered)
{
// Do filtering
}
}
class HtmlFilter : IFilter
{
private string something;
private string iGotSomething;
public string Awesome {get;set;}
public string FilterYo(string textFiltered)
{
// Do filtering
}
}
class Main
{
protected void Main(object sender, EventArgs e)
{
InputClass input = new InputClass();
string filtered = new StartFiltering().Filter(input.Description); // at this moment, my input class shouldn't know anything about filters or something. I don't know if it makes any sense but this is what in my mind.
}
}
在这一点上,如果我想申请抽象工厂,这将是无意义的或建设者以及。因为我不想要特别的东西,我需要所有的东西。
感谢您的答复。
编辑2 - 对我
好了可能的答案让想用的接口,而不是代表的战略格局。
interface IFilter //Strategy interface
{
string Filter(string text);
}
class LinkFilter:IFilter //Strategy concrete class
{
public string Filter(string text)
{
//filter link tags and return pure text;
}
}
class PictureFilter:IFilter //Strategy concrete class
{
public string Filter(string text)
{
//filter links and return pure text;
}
}
class Context
{
private IFilter _filter;
private string _text;
public Context(IFilter filter,string text)
{
this._filter = filter;
this._text = text;
}
public void UpdateFilter(IFilter filter)
{
this._filter = filter;
}
public string RunFilter()
{
this._text = _filter.Filter(this._text);
return this._text;
}
}
class MainProgram
{
static void Main()
{
MyObject obj = new MyObject();
LinkFilter lfilter = new LinkFilter();
PictureFilter pfilter = new PictureFilter();
Context con = new Context(lfilter,obj.Description);
string desc = con.RunFilter();
con.UpdateFilter(pfilter);
desc = con.RunFilter();
}
}
[滤波器设计图案示例](http://www.singhajit.com/filter-design-pattern/) – 2016-10-11 06:20:06