一.设计模式之策略模式:
定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
参考书籍《Head First设计模式》
Duck类所有种类的鸭子的父类代码:
package com.wukung.blog;
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){
}
public void performFly(){
flyBehavior.fly();
}
public void performQuack(){
quackBehavior.quack();
}
//动态的设置叫的方式
public void setQuackBehavior(QuackBehavior q){
quackBehavior = q;
}
//动态的设置飞的方式
public void setFlyBehavior(FlyBehavior f){
flyBehavior = f;
}
public abstract void display();
}
所有飞行行为类必须实现的接口:
package com.wukung.blog;
public interface FlyBehavior {
void fly();
}
--------------------------------------------------------------------------------------------------------------------------
这是飞行行为的实现类,给真正会飞的鸭子用
package com.wukung.blog;
public class FlyWithWing implements FlyBehavior{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("我有翅膀我能飞行");
}
}
--------------------------------------------------------------------------------------------------------------------------
这是飞行行为的实现类,给不会飞的鸭子用
package com.wukung.blog;
public class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("我不能飞行");
}
}
--------------------------------------------------------------------------------------------------------------------------
这是飞行行为的实现类,给飞的像火箭一样的快的鸭子用
package com.wukung.blog;
public class FlyRocketPower implements FlyBehavior{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("能使用火箭动力飞行");
}
}
package com.wukung.blog;
public interface QuackBehavior {
void quack();
}
--------------------------------------------------------------------------------------------------------------------------
这是叫行为的实现类,给会呱呱叫的鸭子用
package com.wukung.blog;
public class Quack implements QuackBehavior{
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("我能像普通鸭子呱呱叫");
}
}
--------------------------------------------------------------------------------------------------------------------------
这是叫行为的实现类,给不飞会叫的木头鸭子用
package com.wukung.blog;
public class QuackMute implements QuackBehavior{
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("橡皮鸭当让不会叫");
}
}
--------------------------------------------------------------------------------------------------------------------------
这是叫行为的实现类,给会咯咯叫的诱饵鸭子用
package com.wukung.blog;
public class Squack implements QuackBehavior{
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("诱饵鸭咯咯叫");
}
}
*************************************************************************************************
这是鸭子的功能测试类:
package com.wukung.blog;
/**
* @author WuKung
* 测试类鸭子游戏类
*/
public class TestDuck {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Duck model = new ModleDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPower());
model.performFly();
}
}
从上面的鸭子游戏可以看出,使用了策略模式的设计方式:
通过定义飞行类:FlyBehavoir接口和实现该接口的的三个实现类1.FlyNoWay 2.FlyWithWing 3.FlyRocketPower
类似的定义了鸭子叫的声音类:
实现封装飞行行为和叫的行为的算法族,让他们之间可以互相替换(多态的体现,实行动态绑定,运行时绑定),如木头鸭,model原本不会飞,通过model.setFlyBehavior(new FlyRocketPower),传入火箭动力的飞行功能后
立刻就实现了火箭飞。