设计模式--策略模式


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


}




 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值