我认为策略模式是java众多模式中最常用,最常见的一种模式.
一句话说,针对同一命令(或行为),不同的策略做不同的动作. (个人总结 难免疏漏 海涵)
举例来说,一个接口有两个实现:
interface RunBehavior {
public void performRun();
}
class Run implements RunBehavior {
public void performRun() { System.out.println(" I can run!"); }
class JumpAsRun implements RunBehavior {
public void performRun() { System.out.println("I cannot run, but I can jump!"); }
解释一下这段简单的程序
跑是一种行为(接口)
正常的动物都可以跑(class Run)
麻雀是不能跑的,它只能跳(class JumpAsRun)
这样的话,其实我们有了一个行为的请求,那就是跑,然后我们有两个策略供选择.
那么如何调用呢?
class Anmial {
RunBehavior runBehavior;
public void run() {
this.runBehavior.performRun();
public void setRunBehavior(RunBehavior runBehavior) {
this.runBehavior = runBehavior;
下面真正开始调用:
public class TestStrategy{
public static void main(String args[]) {
RunBehavior rb1 = new Run();
Animal tiger = new Animal();
tiger.setRunBehavior(rb1);
tiger.run();
Animal bird = new Animal();
bird.run();
// 上面的老虎和鸟分别用了一个策略,下面让老虎用鸟的策略
// 看看会发生什么
// 其实策略模式的重点就在这儿,给对象传入什么样的策略,执行什么样的动作.
具体的还要你自己多思考了,推荐<
>全手工敲入代码,估计你需要微调如果想运行的话
工厂模式是创建型模式
策略模式是行为性模式
一个关注对象创建
一个关注行为的封装
策略模式就是定义一系列的算法,这些算法可以在需要的时候替换和扩展.工厂模式是生成型的模式,在你需要的时候构建具体的实例.
在下面的情况下应当考虑使用策略模式:
① 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为.
一个系统需要动态地在几种算法中选择一种.那么这些算法可以包装到一个个的具体算法类里面,而这些具体算法类都是一个抽象算法类的子类.换言之,这些具体
策略模式的优点和缺点
策略模式有很多优点和缺点.它的优点有:
① 策略模式提供了管理相关的算法族的办法.策略类的等级结构定义了一个算法或行为族.恰当使用继承可以把公共的代码移到父类里面,从而避免重复的代码.
策略模式提供了可以替换继承关系的办法.继承可以处理多种算法或行为.如果不是用策略模式,那么使用算法或行为的环境类就可能会有一些子类,每一个子类提
供一个不同的算法或行为.但是,这样一来算法或行为的使用者就和算法或行为本身混在一起.决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻辑
混合在一起,从而不可能再独立演化.继承使得动态改变算法或行为变得不可能.
策略模式的缺点有:
策略模式与很多其它的模式都有着广泛的联系.Strategy很容易和Bridge模式相混淆.虽然它们结构很相似,但它们却是为解决不同的问题
而设计的.Strategy模式注重于算法的封装,而Bridge模式注重于分离抽象和实现,为一个抽象体系提供不同的实现.Bridge模式与
Strategy模式都很好的体现了"Favor composite over inheritance"的观点.
以上就是土嘎嘎小编为大家整理的策略模式java代码实现相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!