在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
抽象类:Penguin
package StrategyPattern;
public abstract class Penguin {
public String name;
public Penguin(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void eating() {
System.out.println(name + "吃饭");
}
public void sleeping() {
System.out.println(name + "睡觉");
}
public abstract void beating();
public void everyday() {
eating();
sleeping();
beating();
}
}
子类:LittlePenguin
package StrategyPattern;
public class LittlePenguin extends Penguin {
public LittlePenguin(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void beating() {
System.out.println(name + "用小翅膀打");
}
}
子类:MiddlePenguin
package StrategyPattern;
public class MiddlePenguin extends Penguin{
public MiddlePenguin(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void beating() {
System.out.println(name + "用肚子打");
}
}
创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象
package StrategyPattern;
public class BehaviorContext {
private Penguin penguin;
public BehaviorContext(Penguin penguin) {
this.penguin = penguin;
}
public Penguin getPenguin() {
return penguin;
}
public void setPenguin(Penguin penguin) {
this.penguin = penguin;
}
public void everyDay() {
penguin.eating();
penguin.sleeping();
penguin.beating();
}
}
测试类
public class Test {
public static void main(String[] args) {
LittlePenguin littlePenguin = new LittlePenguin("小企鹅");
MiddlePenguin middlePenguin = new MiddlePenguin("中企鹅");
BehaviorContext behaviorContext = new BehaviorContext(littlePenguin);
behaviorContext.everyDay();
behaviorContext.setPenguin(middlePenguin);
behaviorContext.everyDay();
}
}
测试结果:
小企鹅吃饭
小企鹅睡觉
小企鹅用小翅膀打
中企鹅吃饭
中企鹅睡觉
中企鹅用肚子打