Я пытаюсь создать индивидуальный объект, используя фабричный шаблон. В идеале я хочу иметь некоторый базовый объект, который может быть унаследован, но указанный объект может действовать как базовый объект, а также выполнять конкретные задачи, которые он может выполнять. Я не могу получить доступ к данным базового объекта, хотя недавно созданный объект. Я посмотрел на некоторые учебные пособия и собрал вместе то, что, по моему мнению, должно сработать, но ударил стену.
Пока я делаю это на фабрике, чтобы потом было проще тестировать. Я пытался получить доступ к FilterPanel напрямую, не делая его абстрактным, но я не уверен, что это хорошая практика кодирования.
Почему я не могу получить доступ к функциям FilterPanel?
FilterPanel
public abstract class FilterPanel {
//Do generic stuff that all filters can do.
public void ClickFilterButtons(){...}
}
FilterFactory
public class FilterFactory {
public FilterPanel CreateFilterPanel(string filterType) {
FilterPanel filterPanel;
switch (filterType) {
case "invoice":
filterPanel = new InvoiceFilter();
break;
case "payment":
filterPanel = new PaymentFilter();
break;
default:
throw new Exception("wrong filter!");
break;
}
return filterPanel;
}
}
public class InvoiceFilter : FilterPanel {
//Do specific stuff only Invoice filter can do.
public void InvoiceStuff(){...}
}
public class PaymentFilter : FilterPanel {
//Do specific stuff only payment filter can do.
public void PaymentStuff(){...}
}
TestFile
[Test]
FilterFactory filter = new FilterFactory();
filter.CreateFilterPanel("invoice");
//Cannot access this function in the base filter class functions.
filter.ClickFilterButtons();