Jaki wzorzec projektowy wybrać do implementacji różnych języków?

0

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 ? :)

6

Tablicę asocjacyjną.

0

Myślałem o strategii

0

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();
        }
    }
0

A ja (domyślam się he he) widzę tablicę asocjacyjną strategii

0

Factory?
ITaxCalculator przy użyciu metody ComputeTax może obliczać podatek w jakiś przeróżny sposób.
https://gist.github.com/nickofc/aac394c590b738fac4a92364a31e034e

1

Nie potrzebujesz żadnego wzorca aby uniknąć masy ifów. Od tego jest programowanie obiektowe, a konkretnie polimorfizm.

1

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))

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