* μμμ μ νμ©νλ©΄ μ¬μ¬μ© ν μ μμ§λ§, μ€μ μ½λλ₯Ό μ λΉ νλλ°λ λ³ λμμ΄ λμ§ μλλ€.
μ΄λ° μμΌλ‘ μ½λλ₯Ό ꡬννλ©΄ , λμ€μ νλμ μΆκ°νλ€λμ§, λ€λ₯Έ μ€λ¦¬λ₯Ό μΆκ° ν λ λ¬Έμ κ° λ°μνλ€.
μ½λλ₯Ό μ¬μ¬μ©νλ μ μμλ μ’μ§ μκ³ , λμ€μ λ μλ€λλ, κ½₯κ½₯ 거리λ νλμ λ°κΏλ, λͺ¨λ μ½λλ₯Ό λ€ λ°κΏμΌνλ μν©μ μ΄λνλ€.
λμμΈ μμΉ ) μ ν리μΌμ΄μ μμ λ¬λΌμ§λ λΆλΆμ μ°Ύμλ΄κ³ , λ¬λΌμ§μ§ μλ λΆλΆμΌλ‘λΆν° λΆλ¦¬μν¨λ€. |
κ·Έλ λ€λ©΄, Duckν΄λμ€μμλ ?
λλ νλκ³Ό κ½₯κ½₯ 거리λ νλμ λΆλ¦¬ μν¨λ€.
λμμΈ μμΉ ) ꡬνμ΄ μλ μΈν°νμ΄μ€μ λ§μΆ°μ νλ‘κ·Έλλ° νλ€. |
- μ΄λ°μμΌλ‘ λμμΈ νλ©΄ λ€λ₯Έ νμ κ°μ²΄μμλ λλ νλκ³Ό κ½₯κ½₯ νλμ μ¬μ¬μ© ν μ μλ€. (μ½λμ μ¬μ¬μ©)
- κ·Έλ¦¬κ³ , κΈ°μ‘΄μ νλ ν΄λμ€λ₯Ό μμ νκ±°λ λ μλ€λλ νλμ μ¬μ©νλ Duck ν΄λμ€λ₯Ό μ ν 건λλ¦¬μ§ μκ³ λ μλ‘μ΄ νλμ μΆκ° ν μ μλ€.
*μ¬κΈ°μ μ€μν μ μ quack() , fly() λ₯Ό ν΄λμ€μ μλ§κ² μ€ν μν¬μ μμ΄μΌ νλ€.
λ§μ½ RubberDuck(μ₯λκ° κ³ λ¬΄μ€λ¦¬) λ? - (λ μ μλ€, μ μ리λ₯Ό λΈλ€.)
//RubberDuck.java μ€ μμ±μ λΆλΆ.
public RubberDuck(){
flyBehavior = new FlyNoWay();
quackBehavior = new Squeak();
}
μ΄λ° μμΌλ‘ κ° μ€λ¦¬μ νΉμ§μ λ§κ² μμ±μμμ μ΄κΈ°νλ₯Ό μμΌμ€μΌνλ€.
νμ§λ§, μ€νμ€μ λμ μΌλ‘ νλμ μ§μ ν μλ μλ€.
κ·Έλ¬λ €λ©΄ μ΄λ»κ² ν΄μΌνλκ°??
//Duck.java
public void setFlyBehavior( FlyBehavior fb ){
flyBehavior = fb;
}
public void setQuackBehavior( QuackBehavior qb){
quackBehavior = qb;
}
μ€νμ€μ λμ μΌλ‘ νλ μ§μ νκΈ°. setter λ©μλ μ¬μ©!
μλλ mainλ¬Έμμ νλμ μ§μ ν΄μ£Όλ μ½λμ΄λ€.
// main
Duck rubber = new RubberDuck(); // λͺ»λ μ, μ μ리λ₯Ό λ
rubber.performFly();
rubber.setFlyBehavior( new RocketPowered() ); // λͺ»λλ μ€λ¦¬μκ² λ‘μΌμ λ¬μμ£Όμλ€.
rubber.performFly();
μΆλ ₯) μ λ λͺ»λ μμ.
λ‘μΌ μΆμ§μΌλ‘ λ μκ°λλ€!
λμμΈ μμΉ ) μμ보λ€λ ꡬμ±μ νμ©νλ€. |
μ€νΈλν°μ§ ν¨ν΄(Strategy Pattern) μμλ μκ³ λ¦¬μ¦κ΅°μ μ μνκ³ κ°κ°μ μΊ‘μννμ¬ κ΅νν΄μ μ¬μ©ν μ μλλ‘ λ§λ λ€. μ€νΈλν°μ§ λ₯Ό μ νμ©νλ©΄ μκ³ λ¦¬μ¦μ μ¬μ©νλ ν΄λΌμ΄μΈνΈμλ λ 립μ μΌλ‘ μκ³ λ¦¬μ¦μ λ³κ²½ν μ μλ€. |