Лично я не думаю, что вам нужен универсальный класс в этом случае.Вам нужен либо абстрактный базовый класс, либо интерфейс.Мне лично нравится интерфейсный подход, как показано ниже:
public interface ISendLogic {
void New();
void Cancel();
}
Так что теперь у вас есть контракт, который заставит потребителя вашего кода использовать только методы New
или Cancel
.
Следующий шаг, который вы можете реализовать, - это логический интерфейс отправки для вашей конкретной реализации:
public class ChangeSendLogic : ISendLogic {
private eReportType _type;
public ChangeSendLogic(
/*you can put the necessary parameters in the constructor
and keep it as private fields in the object*/
)
{
}
private bool Send_Change()
{
// Send to server by xml file
}
public void New()
{
_type = change_new;
Send_Change();
}
public void Cancel()
{
_type = change_cancel;
Send_Change();
}
}
public class PurchaseSendLogic : ISendLogic {
private eReportType _type;
public PurchaseSendLogic(
/*you can put the necessary parameters in the constructor
and keep it as private fields in the object*/
)
{
}
private bool Send_Purchase()
{
// Send to server by xml file
}
public void New()
{
_type = change_new;
Send_Purchase();
}
public void Cancel()
{
_type = change_cancel;
Send_Purchase();
}
}
Здесь вы можете видеть, что эти два класса прекрасно обрабатывают реализацию для каждого типа.Вы можете думать, что это как реализация принципа единой ответственности .Поэтому, если у вас есть еще один тип, вы можете просто добавить еще одну реализацию этого интерфейса вместо обновления существующих классов.
Если вы хотите скрыть создание этих объектов, в следующей части вы можете представитьвид фабрики или селектора, как показано ниже:
public enum SendLogicType {
Change,
Purchase
}
public static SendLogicSelector {
public static ISendLogic GetSendLogic(SendLogicType type)
{
switch(type)
{
case SendLogicType.Change:
return new ChangeSendLogic();
case SendLogicType.Purchase:
return new PurchaseSendLogic();
}
}
}
Вот как будет использоваться код:
ISendLogic sendLogic = SendLogicSelector.GetSendLogic(SendLogicType.Change);
sendLogic.New(); // change new logic executed
sendLogic.Cancel(); // change cancel logic executed
sendLogic = SendLogicSelector.GetSendLogic(SendLogicType.Purchase);
sendLogic.New(); // purchase new logic executed
sendLogic.Cancel(); // purchase cancel logic executed
Надеюсь, вы можете понять мой подход.Удачи!:)