???????????????fly()??????quack()????????Duck.java?????????????????????á???????????????????μ???????????????е????????????Duck.java??????????????и??????????????????????????????????????????????????γ???(????Squeak.java)????OO?У???????"????"??????????(????????????з???????????????????"????"?????????????????????????????????????????????????Щ?????????е?????????и????????

????2)????仯???????????????

????Duck.java??fly()???quack()???????и?????????

??????????????

publicabstractclassDuck{
//????????????????????????????????????????
FlyBehaviorflyBehavior;
QuackBehaviorquackBehavior;

publicvoidperformFly(){
//?????д???fly()?????????????????flyBehavior?????????????
flyBehavior.fly();
}

publicvoidperformQuack(){
quackBehavior.quack();
}

publicvoidswim(){
System.out.println("Allducksfloat??evendecoys.");
}

publicabstractvoiddisplay();
}

Duck.java????????ν???fly()???quack()????Щ?????????????????ɡ?

publicclassMallardDuckextendsDuck{
publicMallardDuck(){
flyBehavior=newFlyWithWings();
quackBehavior=newQuack();
}

publicvoiddisplay(){
System.out.println("Greenhead.");
}
}

??????

publicclassDuckTest{
publicstaticvoidmain(String[]args){
Duckduck=newMallardDuck();
duck.performFly();
duck.performQuack();
}
}

??????Duck.java??????MallardDuck.java????????У???????????????????????????????????????????????????????

????1)????????????????????????????????(??ο???????????);

????2)?????????????????????????

????3)????趨???

?????????Duck.java???????趨????????setter?????????????????????????????????????????????????????????????????????????????????????????????????????????

publicabstractclassDuck{
//????Duck.java?м????????????????
publicvoidsetFlyBehavior(FlyBehaviorflyBehavior){
this.flyBehavior=flyBehavior;
}

publicvoidsetQuackBehavior(QuackBehaviorquackBehavior){
this.quackBehavior=quackBehavior;
}

//??????????????...
}

??????????

publicclassDuckTest{
publicstaticvoidmain(String[]args){
Duckduck=newMallardDuck();
duck.performFly();
duck.performQuack();
duck.setFlyBehavior(newFlyNoWay());
duck.performFly();
}
}

??????????????????????????????????????????FlyBehavior.java????????????????????????????setQuackBehavior(...)?????????????????Duck.java?????μ???????????????????????????????????

???????????????????????????????и???????????????????????ζ???????:

????3.???????

????MallardDuck???Duck??????->?????????

????FlyWithWings???FlyBehavior????->?仯??????????????

??????Duck.java??setter?????????????->????趨???

????????????????????????????????????????????????迴????:

????1)?????????????????????????????????????????????->??У?isa

????2)??????????????????????????????????????????????????????->????hasa

????setter?????????????

??????У????????????????????????????????????????????????????У????????????????????????????????仯??

???????????????????ü?У?????????