From 53ab42b95128e482748cd351e782c7600cafa730 Mon Sep 17 00:00:00 2001 From: Lucifer Date: Fri, 20 Oct 2017 08:23:29 +0700 Subject: [PATCH] Design Pattern: Group3 --- Homeworks/behavioral_design_patterns/area.rb | 43 ++++++++++++++ .../stratetry_pattern.PNG | Bin 0 -> 16617 bytes .../template_method_pattern.PNG | Bin 0 -> 11465 bytes .../transport_algorithm.rb | 27 +++++++++ .../prototype_patterns.png | Bin 0 -> 12766 bytes .../school_prototypes.rb | 22 +++++++ Homeworks/structural_design_patterns/Pay .png | Bin 0 -> 24253 bytes Homeworks/structural_design_patterns/pay.rb | 55 ++++++++++++++++++ 8 files changed, 147 insertions(+) create mode 100644 Homeworks/behavioral_design_patterns/area.rb create mode 100644 Homeworks/behavioral_design_patterns/stratetry_pattern.PNG create mode 100644 Homeworks/behavioral_design_patterns/template_method_pattern.PNG create mode 100644 Homeworks/behavioral_design_patterns/transport_algorithm.rb create mode 100644 Homeworks/creational_design_patterns/prototype_patterns.png create mode 100644 Homeworks/creational_design_patterns/school_prototypes.rb create mode 100644 Homeworks/structural_design_patterns/Pay .png create mode 100644 Homeworks/structural_design_patterns/pay.rb diff --git a/Homeworks/behavioral_design_patterns/area.rb b/Homeworks/behavioral_design_patterns/area.rb new file mode 100644 index 0000000..08b26ad --- /dev/null +++ b/Homeworks/behavioral_design_patterns/area.rb @@ -0,0 +1,43 @@ +# Template method Design Pattern +# https://cacoo.com/diagrams/fnlz5bSWSRPtuoAF + +class Area + def initialize *args ; end + + def calculate ; end + + def area + calculate() + end +end + +class RectangularArea < Area + def initalize(longitude, width) + @longitude = longitude + @width = width + end + + def calculate + (@longitude + @width) * 2 + end +end + +def SquareArea < Area + def initialize(edge) + @edge = edge + end + + def calculate + (@edge * 4) + end +end + +def CircleArea < Area + def initialize(radius) + @radius = radius + end + + def calculate + (@radius * @radius * 2) + end +end diff --git a/Homeworks/behavioral_design_patterns/stratetry_pattern.PNG b/Homeworks/behavioral_design_patterns/stratetry_pattern.PNG new file mode 100644 index 0000000000000000000000000000000000000000..17c9a7309d92c6706a273ae8c7e7af500c8ee052 GIT binary patch literal 16617 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 n|82-Wzs2qysF-GUR^)UVkU$ literal 0 HcmV?d00001 diff --git a/Homeworks/structural_design_patterns/pay.rb b/Homeworks/structural_design_patterns/pay.rb new file mode 100644 index 0000000..f298288 --- /dev/null +++ b/Homeworks/structural_design_patterns/pay.rb @@ -0,0 +1,55 @@ +# Old code +module PayAPI + def pay() + # your code here + end +end + +class PayWithVietcomBank + include PayAPI + def start_pay() + # your code here + PayAPI.pay() + end +end + +class PayWithVietinBank + include PayAPI + def start_pay() + # your code here + PayAPI.pay() + end +end + +# Problem: If change name of pay method in PayAPI, you need change this name in all class use it +# Soluntion: Use adapter pattern +# Code refactored + +module PayAPI + def pay() + # your code here + end +end + +module CustomPayAPI + include PayAPI + def custom_pay() + PayAPI.pay() + end +end + +class PayWithVietcomBank + include CustomPayAPI + def start_pay() + # your code here + CustomPayAPI.custom_pay() + end +end + +class PayWithVietinBank + include CustomPayAPI + def start_pay() + # your code here + CustomPayAPI.custom_pay() + end +end \ No newline at end of file