策略模式和状态模式的类图相同,目的都是为了解耦,但是还有很多的区别

策略模式

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();
}

可以看到每一次的变化,我的整个档次都变了,无论是娱乐还是穿衣服,所以此为状态模式