策略模式和状态模式的类图相同,目的都是为了解耦,但是还有很多的区别
策略模式
public classs 我{
//打扮
void dressUp();
//娱乐
void entertainment(Grade grade){
grade.entertainment();
}
//买车
void buyCar();
}
策略接口
public interface Grade(
public void hasMoney();
)
策略实现
public class has10 implements Grade{
public void entertainment(){
system.out.print("10块钱保健啥,洗个澡吧")
}
}
public class has100 implements Grade{
public void entertainment(){
system.out.print("100块,按个脚吧")
}
}
public class has1000 implements Grade{
public void entertainment(){
system.out.print("1000块,那就来个大保健吧")
}
}
调用
public class Client {
public static void main(String[] args) {
我 me = new 我();
me.entertainment(new has10());
me.entertainment(new has100());
}
可以看到只有针对娱乐有不同方法,而其他的项目没有影响,此为策略模式
状态模式
我类的修改
public classs 我{
private Grade grade;
public void setGrade(Grade grade) {
this.grade= grade;
}
//打扮
void dressUp(
grade.dressUp();
);
//娱乐
void entertainment(Healthcare healthcare){
grade.dressUp();
}
//买车
void buyCar(
grade.buyCar();
);
}
调用
public static void main(String[] args) {
我 me = new 我();
me.setGrade(new has10());
me.entertainment();
me.dressUp();
me.setGrade(new has100());
me.entertainment();
}
可以看到每一次的变化,我的整个档次都变了,无论是娱乐还是穿衣服,所以此为状态模式