<!--设计模式之Strategy Pattern -行为型模式--策略模式>
// 定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户
Demo1---FACTORY METHOD
鸭子有飞行和鸣叫两种行为,而不同的鸭子,它的飞行行为和鸣叫行为各不相同,如何创建一个程序实现
---------------------------------------------------
---------------------------------------------------
package model;
public abstract class Duck {
/**
* 飞行行为
*/
FlyBehavior flyBehavior;
/**
* 叫声行为
*/
QuackBehavior quackBehavior;
//抽象方法
public Duck(){
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
public abstract void display();
//委托给行为类
public void performFly(){
flyBehavior.fly();
}
//委托给行为类
public void performQuack(){
quackBehavior.quack();
}
public void swim(){
System.out.println("All ducks float,even decoys!");
}
}
--------------------------------------------------------------
--------------------------------------------------------------
package model;
import dao.FlyWithSwing;
import dao.Quack;
public class MallarDuck extends Duck{
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("I'm real Mallard duck");
}
public MallarDuck(){
quackBehavior = new Quack();
flyBehavior = new FlyWithSwing();
}
}
---------------------------------------------------------------------
----------------------------------------------------------------------
package model;
import dao.FlyNoWay;
import dao.Quack;
public class ModelDuck extends Duck{
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("I'm a model duck!!");
}
public ModelDuck(){
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
}
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
package model;
public interface FlyBehavior {
public void fly();
}
------------------------------------------------------------------------------
-------------------------------------------------------------------------------
package model;
public interface QuackBehavior {
public void quack();
}
------------------------------------------------------------------------------
-------------------------------------------------------------------------------
package dao;
import model.FlyBehavior;
public class FlyNoWay implements FlyBehavior{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I can't fly!!");
}
}
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
package dao;
import model.FlyBehavior;
public class FlyRocketPowered implements FlyBehavior{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I'm flying with a rocket!");
}
}
------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
package dao;
import model.FlyBehavior;
public class FlyWithSwing implements FlyBehavior {
@Override
public void fly() {
System.out.println("I'm flying!!");
}
}
------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
package dao;
import model.QuackBehavior;
public class MuteQuake implements QuackBehavior{
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("silence");
}
}
------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
package dao;
import model.QuackBehavior;
public class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("Quack");
}
}
-----------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
package dao;
import model.QuackBehavior;
public class Squake implements QuackBehavior{
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("Squake");
}
}