Poniższy scenariusz przytrafił mi się kilka razy.
Zaprogramowałem algorytm, który rozwiązuje pewien problem. Działa dobrze i znajduje właściwe rozwiązania. Teraz chcę mieć możliwość powiedzenia algorytmowi „napisz pełne wyjaśnienie, w jaki sposób dotarłeś do rozwiązania”. Moim celem jest umiejętność korzystania z algorytmu podczas demonstracji online, zajęć instruktażowych itp. Nadal chcę mieć możliwość uruchamiania algorytmu w czasie rzeczywistym, bez wyjaśnień. Jakiego wzorca projektowego należy użyć?
PRZYKŁAD: Załóżmy, że wdrażam tę metodę w celu znalezienia największego wspólnego dzielnika . Aktualnie wdrożona metoda zwraca poprawną odpowiedź, ale bez wyjaśnień. Chcę mieć opcję wyjaśniającą jej metodę, na przykład:
Initially, a=6 and b=4. The number of 2-factors, d, is initialized to 0.
a and b are both even, so we divide them by 2 and increment d by 1.
Now, a=3 and b=2.
a is odd but b is even, so we divide b by 2.
Now, a=3 and b=1.
a and b are both odd, so we replace a by (a-b)/2 = 1.
Now, a=1 and b=1.
a=b, so the GCD is a*2^d = 2.
Dane wyjściowe powinny zostać zwrócone, aby można je było łatwo wyświetlić zarówno w konsoli, jak i aplikacjach internetowych.
Jaki jest dobry wzorzec dostarczania wyjaśnień, gdy jest to potrzebne, bez uszczerbku dla wydajności algorytmu w czasie rzeczywistym, gdy wyjaśnienia nie są potrzebne?