Jaki wzorzec projektowy można wybrać do implementacji różnych języków?
Kraje mają różne watowania, niektóre kraje mają 0, nie widzi mi się pisać pełno ifów do tego. Jaki wzorzec najlepiej by się sprawdził w takiej sytuacji ? :)
Jaki wzorzec projektowy wybrać do implementacji różnych języków?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 54
- Rejestracja: dni
- Ostatnio: dni
- Postów: 54
Myślałem o strategii
- Rejestracja: dni
- Ostatnio: dni
- Postów: 235
możesz wykorzystać strategie przykład
public enum Country
{
PL,
EN
}
public abstract class Display
{
public abstract void CountryName();
}
public class Poland : Display
{
public override void CountryName()
{
Console.WriteLine("Poland");
}
}
public class England : Display
{
public override void CountryName()
{
Console.WriteLine("England");
}
}
public class Context
{
public Dictionary<Country, Display> dic;
public Context()
{
dic = new Dictionary<Country, Display> {
{Country.EN, new England() },
{Country.PL, new Poland() }
};
}
public void Show(Country country)
{
dic[country].CountryName();
}
}
class Program
{
static void Main(string[] args)
{
Context context = new Context();
context.Show(Country.EN);
Console.ReadKey();
}
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3561
A ja (domyślam się he he) widzę tablicę asocjacyjną strategii
- Rejestracja: dni
- Ostatnio: dni
- Postów: 58
Factory?
ITaxCalculator przy użyciu metody ComputeTax może obliczać podatek w jakiś przeróżny sposób.
https://gist.github.com/nickofc/aac394c590b738fac4a92364a31e034e
- Rejestracja: dni
- Ostatnio: dni
- Postów: 444
Information Expert
https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: UK
- Postów: 2235
Nie potrzebujesz żadnego wzorca aby uniknąć masy ifów. Od tego jest programowanie obiektowe, a konkretnie polimorfizm.
- Rejestracja: dni
- Ostatnio: dni
Broń Boże, żadnych wzorców projektowych w tym przypadku, kod powyżej pokazuje do czego to prowadzi. Dużo linii kodu o niczym żeby zaimplementować słownik (kto umie przewidzieć wydajność takiego rozwiązania? Użyty zostanie hash czy zwykły switch? A może działanie będzie określone w czasie kompilacji?). Co ewentualnie można rozważyć to ustalenie stawki w pliku konfiguracyjnym i/lub określać kraj na podstawie locale (choc to nie jest zachowanie zawsze właściwe).
Nie znam tego waszego c# więc po mojemu:
(let ((vat (make-hash-table)))
(Setf (gethash 'pl vat) 0.22)
(Defun vat (where) (gethash where vat)))
(Print (vat 'pl))