μμ±μΌ: 2018.01.22
Strategy pattern
μΌλͺ , μ λ΅ν¨ν΄
λͺ©μ
- κ°κ°μ μΊ‘μννμ¬ λ³ν κ°λ₯νκ² λ§λ μκ³ λ¦¬μ¦μ μ§ν©μ μ μνλ€.
- μΈν°νμ΄μ€μ μΆμ λ©μλλ₯Ό μ μνκ³ , μμΈν ꡬνμ νμλ ν΄λμ€μ νλ€.
- Strategy ν¨ν΄μ μκ³ λ¦¬μ¦μ΄ κ·Έκ²μ μ¬μ©νλ ν΄λΌμ΄μΈνΈμ λ 립μ μΌλ‘ λ³νν μ μκ² ν΄μ€λ€. β OCP
OCP(Open-Closed Principle;κ°λ°© νμ μμΉ) νμ₯μλ μ΄λ €μκ³ , μμ μλ λ«ν μμ΄μΌ νλ€λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ μμΉ
ν΄κ²°ν μ μλ λ¬Έμ
ν΄λΌμ΄μΈνΈλ λ³νμ κ΄λ ¨ν΄μ μ κ²½μ°μ§ μμμΌ νλ€.
β νμλ ν΄λμ€ μκ° λ³νμ κ²½μ°, νμλ ν΄λμ€μ ꡬνμ΄ λ°λμμ κ²½μ°μ λν μν₯μ΄ μμ΄μΌ νλ€.
ꡬ쑰
2κ°μ§ ꡬν λ°©λ²
- Abstract base class
Interface entity(μ ꡬ쑰μμμ Interface)λ₯Ό abstract base classλ‘ λνλΈλ€.
β μμ κ³μΈ΅μ΄ λμ μΈ λ€νμ±μ λνλΈλ€. - ν΄λΌμ΄μΈνΈμ μν method signature(method name + parameters) μμΈ‘
β μ΄ κ²½μ° Interface entityλ ν΄λΌμ΄μΈνΈμμ template codeκ° λκ³ , μμ κ³μΈ΅μ μ μ μΈ λ€νμ±μ λνλΈλ€. (μ΄ λ°©λ²μ μ λͺ¨λ₯΄κ² μ.. λ€μ μ°Ύμλ³Ό κ²)
μμ
μ½λ μμ λ‘ μ€λͺ
μ΄ μ λμ΄μλ κΈ
(Abstract base class λ°©λ²μΌλ‘ ꡬνν μμ )
λ€λ₯Έ ν¨ν΄λ€κ³Όμ λΉκ΅
- Strategy ν¨ν΄μ μμΈνκ² λλλ μ λλ₯Ό μ μΈνλ©΄ Template-method ν¨ν΄κ³Ό λΉμ·νλ€.
- State, Strategy, Bridge ν¨ν΄μ λΉμ·ν ꡬ쑰λ₯Ό κ°μ§μ§λ§ λͺ©μ μ λͺ¨λ λ€λ₯΄λ€.
β μ¦, κ°κ° λ€λ₯Έ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λ°©λ² - Strategy ν¨ν΄μ 첫λ²μ§Έ ꡬν λ°©λ²(Abstract base class)μ State ν¨ν΄κ³Ό μ μ¬νλ€.
- μ°¨μ΄μ : Strategy ν¨ν΄μ νλ² λ°μΈλ©λκ³ , State ν¨ν΄μ λμ μΌλ‘ μ¬λ¬λ² λ°μΈλ©λλ€.
[Reference]
Design Patterns Explained Simply - Alexander Shvets
http://jdm.kr/blog/54
http://www.bitesizedcsharp.com/
'κ°λ° > Design pattern' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Design Pattern] Observer Pattern (0) | 2021.04.08 |
---|