您的位置:首页 > 其它

设计模式--策略模式

2017-09-21 17:27 204 查看
<!--设计模式之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");
}

}

------------------------------------------------------------------------------------------

-----------
4000
--------------------------------------------------------------------------------

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");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息