Wzorzec projektowy dla problemu

0

Witam
Mam 3 klasy powiedzmy podobny przykład do poniższego. Chcę wykonać operację na nich i udostępnić jakiś wspólną klasę, która wykona te 3 operacje.

public static class ClassA
{
         public static void doSomething()
         {}
}

public static class ClassB
{
         public static void doSomething(string param1)
         {}
}

public static class ClassC
{
         public static void doSomething(int param2)
         {}
}
 

Innymi słowy chce stworzyć klasę która uprości to i zamiast po stronie klienta pisać za każdym razem:

ClassA.doSomething(); 
ClassB.doSomething(param1); 
ClassC.doSomething(param2)

Banalne i idealnie pasuje tu wzorzec Fasady. Problem w tym, że operacje mogą być wykonywane różnie - raz metody w klasie A i B. Raz w klasie A i C, raz A, B, C. Zależy to od wyboru użytkownika. Pytanie jaki wzorzec projektowy zastosować w takim podejściu.

0

zwykly polimorfizm tu sie nada. Zobacz sobie Abstract Factory Pattern

0

Niech to nie będą klasy statyczne. Może coś takiego:

interface IDoSomething
{
	void DoSomething(params object[] args);
}

class ClassA : IDoSomething { void DoSomething(params object[] args) { ... } }
class ClassB : IDoSomething { void DoSomething(params object[] args) { ... } }
class ClassC : IDoSomething { void DoSomething(params object[] args) { ... } }

static class DoIt
{
	public static void Do(Type[] types, params object[] args)
	{
		foreach (var type in types)
		{
			(Activator.CreateInstance(type) as IDoSomething).DoSomething(args);
		}
	}
}


DoIt.Do(new Type[] { typeof(ClassB ), typeof(ClassC ) }, arg1, arg2);
0

a nie wystarczy delegacja i klasa i przeciążona metodą dosomething?


public static class ClassaZbioracza
{
        /* edit nie potrzebne bo metody w klasach sa statyczne
          static  Class1  c1Instance // itd.
          //....
         ClassaZbioracza(Class1 c1,Class2 c2,Class3 c3)
         {
                  c1Instance = c1; // itd dla kolejnych 
                  //...
           }       */
         public static void doSomething(string param1)
         {
                  Class1 .doSomething(param1)
         }
         public static void doSomething(int param2)
          { 
                  Class2 .doSomething(param2)
          }
          public static void doSomething()
         {
                  Class3 .doSomething()
         }
}
 

 

a jesli chcesz mieć kilka naraz i masz pewność ze typy ci sie nie zazębiają to możesz w pisać brzydkie przeciążenia przemnoży przez przypadki.

1

A co z argumentami dla metod? Zawsze mają być takie same? Jeśli tak to po co argumenty. Zakładam więc że tak nie jest.
Czemu chcesz wywoływać je na raz? Jakaś transakcja? Czy zbierasz od użytkownika najpierw rzeczy które chcesz potem zrobić? Jak to wygląda "wyżej"? Dlaczego używasz statycznych klas? Może całe rozwiązanie jakie próbujesz zrobić jest nieobiektowe i w tym leży problem?

1 użytkowników online, w tym zalogowanych: 0, gości: 1