设计模式--策略模式

来源:互联网 发布:淘宝大韩泡泡糖靠谱吗 编辑:程序博客网 时间:2024/06/05 11:48

<!--设计模式之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");
}


}





原创粉丝点击