策略模式

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

[img]http://dl.iteye.com/upload/attachment/0077/8431/7bb3f063-40a6-30be-a17b-2b33458fee93.jpg[/img]

Context( 应用场景 ):
需要使用 ConcreteStrategy 提供的算法。
内部维护一个 Strategy 的实例。
负责动态设置运行时 Strategy 具体的实现算法。
负责跟 Strategy 之间的交互和数据传递。
Strategy( 抽象策略类 ) :
定义了一个公共接口,各种不同的算法以不同的方式实现这个接口, Context 使用这个接口调用不同的算法,一般使用接口或抽象类实现。
ConcreteStrategy( 具体策略类 ) :
实现了 Strategy 定义的接口,提供具体的算法实现。

下面我们举一个例子就可以了:

[b][size=medium][color=red]context类[/color][/size][/b]

public class Duck {

//定义策略类
private Flyable fly;
private Quackable quack;

public void swim() {
System.out.println("duck is swimming");
}

//使用策略类的方法
public void fly() {
if(fly!=null)
fly.fly();
}

//使用策略类的方法
public void quack() {
if(quack!=null)
quack.quack();
}

//注入策略类
public void setFlyable(Flyable fly) {
this.fly = fly;
}
//注入策略类
public void setQuackable(Quackable quack) {
this.quack = quack;
}

public void display() {
swim();
fly();
quack();
}

public static void main(String args[]) {
Duck duck = new Duck();

//注入策略类
duck.setFlyable(new FlyImplement2());
duck.setQuackable(new QuackImplement2());

duck.display();
}
}



[b][size=medium][color=red]策略接口[/color][/size][/b]
public interface Flyable {
public void fly();
}

public interface Quackable {
public void quack();
}

[b][size=medium][color=red]策略实现类[/color][/size][/b]


public class FlyImplement2 implements Flyable{

@Override
public void fly() {
System.out.println("FlyImplement2");
}

}


public class QuackImplement2 implements Quackable{

@Override
public void quack() {
System.out.println("QuackImplement2");
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值