Myślę o utworzeniu obiektu filtrującego, który filtruje i usuwa wszystkie elementy, takie jak znaczniki html z kontekstu. Ale chcę, żeby był niezależny, co oznacza, że wzór, który mogę zastosować, pomoże mi dodać więcej filtrów w przyszłości bez wpływu na obecne kody. Myślałem, że chodzi o Abstract Factory, ale wygląda na to, że nie zadziała tak, jak chcę. Więc może budowniczy, ale wygląda to tak samo. Nie wiem, jestem nieco zmieszany, niektórzy polecają mi wzór, który może rozwiązać mój problem, ale wcześniej, pozwól mi trochę rozwikłać problem.Wzorce projektowe Zalecenie dla opcji filtrowania
Powiedzmy, że mam klasę, która ma pole lub właściwość Opis, co jeszcze. Potrzebuję filtrów, które usuwają rzeczy, które chcę z tej właściwości opisu. Dlatego za każdym razem, gdy stosuję filtr, mogę dodać więcej filtru w warstwie podstawowej. Zamiast więc ponownie dotykać pola Opis, mogę łatwo dodać więcej filtrów i wszystkie filtry będą działały w polu Opis i usuwają wszystko, co mają usunąć z kontekstu Opis.
Mam nadzieję, że mógłbym opisać mój problem. Myślę, że niektórzy z was wpadli wcześniej w tę samą sytuację.
góry dzięki ...
Edit:
I rzeczywiście chcą tworzyć filtry jako typy/klas zamiast zwykłych metod czy cokolwiek innego. Na przykład:
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.
}
}
W tym momencie, jeśli chcę zastosować abstrakcyjną fabrykę, która byłaby pozbawiona sensu lub też Builder. Ponieważ nie chcę żadnej konkretnej rzeczy, potrzebuję ich wszystkich.
Dzięki za odpowiedzi przy okazji.
Edycja 2 - możliwa odpowiedź dla mnie
Ok pozwala myśleć o strukturze strategii z interfejsów zamiast delegatów.
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();
}
}
[Filter Pattern Design Z Przykład] (http://www.singhajit.com/filter-design-pattern/) –