μ€λ¦¬λ₯Ό μμμ μ΄μ©νμ¬ κ΅¬ννμμ κ²½μ°
class Duck() {
quack(); // μ€λ¦¬ μΈμμ리λ₯Ό λ΄λ method
swim(); // μ€λ¦¬κ° ν€μμ μΉλ method
display(); // μ€λ¦¬μ λͺ¨μμ μμ ν΄λμ method
}
class MalladDuck extends Duck
class ReadHeadDuck extends Duck
μμ κ°μ΄ ꡬνλμ΄ μλ κ²½μ°μ λν μν© λΆμ
fly() λ©μλ μΆκ°
fly() λ©μλλ κ³ λ¬΄μ€λ¦¬μ μλ§μ§ μμquack λ λͺ»νκ³ , λ μ§λ λͺ»νλ λμΌν λ¬Έμ κ° λ°μ ν¨μΈν°νμ΄μ€λ₯Ό νμ©νμ¬ κ΅¬ν
interface Flyable {
fly();
}
interface Quackable {
quack();
}
class Duck {
swim();
display();
}
class MalladDuck extends Duck implements Quackable, Flyable
class ReadHeadDuck extends Duck implements Quackable, Flyable
class RubberDuck extends Duck implements Quackable
class DecoyDuck extends Duck
fly() ꡬν체λ₯Ό μ¬νμ© ν μ μλ€λ λ¬Έμ μ κ³Ό, μΈν°νμ΄μ€κ° λ€μν΄μ§μ λ°λΌ κ²°λ‘ μ μΌλ‘ μ μ°νμ§ μμ κ΅¬μ‘°κ° νμ ν μ μμλ³νλ λΆλΆκ³Ό, λ³νμ§ μλ λΆλΆ λΆλ¦¬νκ³ μμμ ν΅ν΄ ν΅ν©νκΈ°
flyBehavior, quackBehavior λΌλ μΈν°νμ΄μ€λ₯Ό λκ³ , μ΄ μΈν°νμ΄μ€λ₯Ό ꡬννλ ꡬ체 ν΄λμ€μ ꡬν ν΄ λ interface FlyBehavior {
void fly();
}
class FlyWithWings() implements FlyBehavior
class FlyNoWay() implements FlyBehavior
interface QuackBehavior {
void quack();
}
class Quack implements QuackBehavior // κ½₯
class Squeak implements QuackBehavior // κ³ λ¬΄μ€λ¦¬ μ리
class MuteQuack implements QuackBehavior // μ리 μλ
class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
void performQuack() {
quackBehavior.quack();
}
void performFly() {
flyBehavior.fly();
}
}
class MalladDuck extends Duck {
MalladDuck() {
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
}
<aside> π‘ μκ³ λ¦¬μ¦ κ΅°μ μ μνκ³ , κ°κ°μ μΊ‘μννμ¬ κ΅νν΄μ μ¬μ©ν μ μλλ‘ κ°λ°νλ λ°©μ
</aside>
<aside> π‘
μλΉμ€μμ λ¬λΌμ§λ λΆλΆμ μ°Ύμλ΄κ³ , λ¬λΌμ§λ λΆλΆμ λ¬λΌμ§μ§ μλ λΆλΆμΌλ‘ λΆν° λΆλ¦¬ ( μΊ‘μν ) μμΌμΌ ν¨
</aside>
fly , quack κ³Ό κ°μ λΆλΆμΈλ° μ΄ λΆλΆμ λ³νμ§ μλ λΆλΆ ( swim, display )κ³Ό λΆλ¦¬ μμΌμΌ νλ€λ λ»<aside> π‘ ꡬνμ²΄κ° μλ μΈν°νμ΄μ€μ μμ‘΄νλλ‘ κ°λ° ν¨
</aside>