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 ? :)
Tablicę asocjacyjną.
Myślałem o strategii
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();
}
}
A ja (domyślam się he he) widzę tablicę asocjacyjną strategii
Factory?
ITaxCalculator przy użyciu metody ComputeTax może obliczać podatek w jakiś przeróżny sposób.
https://gist.github.com/nickofc/aac394c590b738fac4a92364a31e034e
Information Expert
https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)
Nie potrzebujesz żadnego wzorca aby uniknąć masy ifów. Od tego jest programowanie obiektowe, a konkretnie polimorfizm.
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))