设计模式学习--策略模式(Strategy Pattern) (二)

2014-11-24 11:10:39 · 作者: · 浏览: 1
]
package strategyPattern;

public class Quack implements QuackBehavior {

@Override
public void quack() {
//实现鸭子呱呱叫
System.out.println("Quack");
}

}

package strategyPattern;

public class Quack implements QuackBehavior {

@Override
public void quack() {
//实现鸭子呱呱叫
System.out.println("Quack");
}

}

[java]
package strategyPattern;

public class Squack implements QuackBehavior {

@Override
public void quack() {
//橡皮鸭子叽叽叫
System.out.println("Squack");
}

}

package strategyPattern;

public class Squack implements QuackBehavior {

@Override
public void quack() {
//橡皮鸭子叽叽叫
System.out.println("Squack");
}

}

[java]
package strategyPattern;

public class MuteQuack implements QuackBehavior {

@Override
public void quack() {
// 什么都不做,不会叫
}

}

package strategyPattern;

public class MuteQuack implements QuackBehavior {

@Override
public void quack() {
// 什么都不做,不会叫
}

}

整合鸭子的行为,让不同的鸭子继承鸭类(Duck)
[java]
package strategyPattern;

/**
* 绿头鸭继承鸭类
* @author wwj
*
*/
public class MallardDuck extends Duck{

/**
* 因为MallardDuck继承Duck类,所以具有flyBehavior与quackBehavior实例变量
*/
public MallardDuck() {
quackBehavior = new Quack(); //真正的呱呱叫
flyBehavior = new FlyWithWings(); //会用翅膀飞
}

public void display() {
System.out.println("I'm a real Mallard duck"); //我是一个真正的绿头鸭
}

}

package strategyPattern;

/**
* 绿头鸭继承鸭类
* @author wwj
*
*/
public class MallardDuck extends Duck{

/**
* 因为MallardDuck继承Duck类,所以具有flyBehavior与quackBehavior实例变量
*/
public MallardDuck() {
quackBehavior = new Quack(); //真正的呱呱叫
flyBehavior = new FlyWithWings(); //会用翅膀飞
}

public void display() {
System.out.println("I'm a real Mallard duck"); //我是一个真正的绿头鸭
}

}
[java]
package strategyPattern;

public class RedheadDuck extends Duck{
public RedheadDuck() {
flyBehavior = new FlyWithWings();
quackBehavior = new Quack();
}

@Override
public void display() {
System.out.println("I'm a RedheadDuck!!"); //红头鸭
}

}

package strategyPattern;

public class RedheadDuck extends Duck{
public RedheadDuck() {
flyBehavior = new FlyWithWings();
quackBehavior = new Quack();
}

@Override
public void display() {
System.out.println("I'm a RedheadDuck!!"); //红头鸭
}

}

[java]
package strategyPattern;

public class RubberDuck extends Duck{
public RubberDuck() {
}

@Override
public void display() {
System.out.println("I'm a RubberDuck!!!");
}

}

package strategyPattern;

public class RubberDuck extends Duck{
public RubberDuck() {
}

@Override
public void display() {
System.out.println("I'm a RubberDuck!!!");
}

}

[java]
package strategyPattern;

public class ModelDuck extends Duck {
public ModelDuck() {
flyBehavior = new FlyNoWay(); //不会飞
quackBehavior = new Quack(); //会叽叽叫
}

@Override
public void display() {
System.out.println("I'm a model duck");
}

}

package strategyPattern;

public class ModelDuck extends Duck {
public ModelDuck() {
flyBehavior = new FlyNoWay(); //不会飞
quackBehavior = new Quack(); //会叽叽叫
}

@Override
public void display() {
System.out.println("I'm a model duck");
}

}

[java]
package strategyP