我想創建一個過濾器對象,從上下文中過濾和刪除所有內容,如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