策略模式和状态模式的区别
【摘要】
策略模式和状态模式的类图相同,目的都是为了解耦,但是还有很多的区别
策略模式
public classs 我{ //打扮 void dressUp(); //娱乐 void entertainment(Grade grade){ grade.entertainment(); } //买车...
策略模式和状态模式的类图相同,目的都是为了解耦,但是还有很多的区别
策略模式
-
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();
-
}
可以看到每一次的变化,我的整个档次都变了,无论是娱乐还是穿衣服,所以此为状态模式
文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。
原文链接:baocl.blog.csdn.net/article/details/102581277
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)