设计模式head first学习
最近看了设计模式head first第一章,很有收获,对于我这种不常用模式的人来说,java才是最适合理解模式的语言
Ducker里面组合了,FlyBehavor QuackBehavor两个接口
其他的类通过实现这两个接口去实现具体的功能。
而ducker的派生类通过多态去使用这两个接口的派生类。
说到java的单继承,我想起了一个问题,一个人是父亲和母亲的孩子,他继承了两个人的特征,在java里面怎么表示?恐怕只能使用组合了。逻辑上的概念和实际上的概念差异性不可避免。用c++我就可以公开继承了。
package design_partner;
interface QuackBehavor{
public void quack();
}
interface FlyBehavor{
public void fly();
}
abstract class Ducker{
protected QuackBehavor quackBehavor ;
protected FlyBehavor flyBehavor ;
abstract void showDucker();
public void setQuackBehavor(QuackBehavor quackBehavor){
this.quackBehavor = quackBehavor;
}
public void setFlyBehavor(FlyBehavor flyBehavor){
this.flyBehavor = flyBehavor;
}
public void PerformFly(){
flyBehavor.fly();
}
public void PerformQuack(){
quackBehavor.quack();
}
}
class FlyWithWings implements FlyBehavor{
public void fly(){
System.out.println("fly with wings");
}
}
class FlyNoWay implements FlyBehavor{
public void fly() {
System.out.println("fly no way");
}
}
class Quack implements QuackBehavor{
public void quack(){
System.out.println("quack !");
}
}
class MuteQuack implements QuackBehavor{
public void quack(){
System.out.println("mutequack!");
}
}
class ModelDuck extends Ducker {
public ModelDuck(){
this.flyBehavor = new FlyNoWay();
this.quackBehavor = new Quack();
}
public void showDucker(){
System.out.println("modelduck!");
}
}
public class StrategyPattern {
public static void main(String argvs[]){
System.out.println("start");
ModelDuck modelDuck = new ModelDuck();
modelDuck.showDucker();
}
}