总章目录,设计模式(一)基本介绍
一、定义
策略模式:策略模式定义了算法族,分别封装起来,让他们之间可以互相转换,此模式算法的变化独立于使用算法的客户,但是策略模式造成很多的策略类。
策略模式主要包含以下角色。
Contex: 环境类,持有一个策略类的引用,最终给客户端调用。
Strategy: 抽象策略(Strategy)类:定义公共接口,使用接口或抽象类实现。
ConcreteStrategy: 实现了抽象策略定义的接口
二、使用场景
策略模式使我们的程序更易于维护和扩展。因此,当我们通常需要在这些场景中选择策略模式:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
三、简单案列
我们知道猴子有七十二变,通过变身可以有各种变化,猴子本身就是一个Context,它有一个变身的技能,可以变声也可以恢复真身。
Contex:
public class Monkey {
Morph morph;
public Monkey(Morph morph) {
this.morph = morph;
}
public void show(){
morph.change();
}
public void setMorph(Morph morph) {
this.morph = morph;
}
}
Strategy:
public interface Morph {
void change();
}
ConcreteStrategy:
public class NoMorph implements Morph {
@Override
public void change() {
System.out.println("真身");
}
}
public class DragonMorph implements Morph {
@Override
public void change() {
System.out.println("变身为龙");
}
}
测试使用
public class StrategyTest {
@Test
public void MonkeyTst(){
Monkey monkey=new Monkey(new NoMorph());
monkey.show();
monkey.setMorph(new DragonMorph());
monkey.show();
}
}
打印:
真身
变身为龙
网友评论