23种设计模式:状态模式
状态模式
1.介绍
概念
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
主要作用
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
解决的问题
对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。
使用场景
1、行为随状态改变而改变的场景。 2、条件、分支语句的代替者。
(引用自菜鸟教程)
2.实现
背景
创建一个游戏角色类,游戏角色的状态取决于当前护甲的状态,护甲有破裂和完好两种状态。
实现步骤
1.创建一个Armor接口
//护甲接口
public interface Armor {
public void addProtection(Hero hero);
}
2.创建一个BrokenArmor类。
public class BrokenArmor implements Armor{
@Override
public void addProtection(Hero hero) {
System.out.println("护甲破裂,无法为角色提供保护...");
hero.setArmor(this);
}
public String toString() {
return "非保护状态";
}
}
3.创建一个CompleteArmor类。
public class CompleteArmor implements Armor{
@Override
public void addProtection(Hero hero) {
System.out.println("护甲完好,可以为角色提供保护...");
hero.setArmor(this);
}
public String toString() {
return "保护状态";
}
}
4.创建一个Hero类
public class Hero {
private Armor armor;
public Hero() {
armor = null;
}
public void setArmor(Armor armor) {
this.armor = armor;
}
public Armor getArmor() {
return armor;
}
}
5.测试类
public class StatePatternDemo {
public static void main(String[] args) {
Hero hero = new Hero();
BrokenArmor brokenArmor = new BrokenArmor();
brokenArmor.addProtection(hero);
System.out.println(hero.getArmor().toString());
CompleteArmor completeArmor = new CompleteArmor();
completeArmor.addProtection(hero);
System.out.println(hero.getArmor().toString());
}
}
5.运行结果
护甲破裂,无法为角色提供保护…
非保护状态
护甲完好,可以为角色提供保护…
保护状态