声明:
- 《Head First设计模式》23页提问,如何实现自己的鸭鸣器不继承Duck类?本文解答这个问题。
正如该书前面所说,通常【有一个】比【是一个】更好。MallardDuck, RedheadDuck, ModelDuck都是鸭子,所以它们继承了父类Duck,也就继承了父类的属性flyBehavior
, quackBehavior
和父类的方法display()
。
鸭鸣器不是鸭子,不继承父类Duck,那么它需要自己在类中定义以上属性和方法。
public class Duckcall {
FlyBehavior flyBehavior = new FlyNoWay();
QuackBehavior quackBehavior = new Quack();
public Duckcall() {}
public void performFly() {
flyBehavior.fly()
}
public void performQuack() {
quackBehavior.quack();
}
public void display() {
System.out.println("I'm a 'duck'.")
}
}