状态模式
【摘要】
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
结构:就是在把所有情况拆分成多个类,在调用时把这些类分别set进去。
场景:在玩lol时 有攻击,行走,技能使用,那么按照状态模式分,就分为正常时三个行为的状态,被控制是这三个行为的状态,被眩晕时这三个行为的状态。
优点:1.减少if else的使用
...
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
结构:就是在把所有情况拆分成多个类,在调用时把这些类分别set进去。
场景:在玩lol时 有攻击,行走,技能使用,那么按照状态模式分,就分为正常时三个行为的状态,被控制是这三个行为的状态,被眩晕时这三个行为的状态。
优点:1.减少if else的使用
2.减少耦合度,是扩展更容易
缺点:使类增多,结构变复杂。
类图:
代码:
Context
-
public classs 我{
-
-
private Grade grade;
-
-
public void setGrade(Grade grade) {
-
this.grade= grade;
-
}
-
//打扮
-
void dressUp(
-
grade.dressUp();
-
);
-
-
//娱乐
-
void entertainment(Grade grade){
-
grade.dressUp();
-
}
-
-
//买车
-
void buyCar(
-
grade.buyCar();
-
);
-
-
-
}
策略接口
-
public interface Grade(
-
-
public void dressUp();
-
-
public void entertainment();
-
-
public void buyCar();
-
-
)
策略实现
-
public class has10 implements Grade{
-
-
public void dressUp(){
-
system.out.print("10块钱,来个跨栏背心得了")
-
}
-
-
public void entertainment(){
-
system.out.print("10块钱保健啥,洗个澡吧")
-
}
-
-
public void buyCar(){
-
system.out.print("10块钱,坐公交吧")
-
}
-
-
}
-
public class has100 implements Grade{
-
-
public void dressUp(){
-
system.out.print("100块钱,来个山寨耐克")
-
}
-
-
public void entertainment(){
-
system.out.print("100块钱,按个脚吧")
-
}
-
-
public void buyCar(){
-
system.out.print("100块钱,打车!")
-
}
-
}
-
public class has1000 implements Grade{
-
-
public void dressUp(){
-
system.out.print("1000块钱,来个正品的361度")
-
}
-
-
public void entertainment(){
-
system.out.print("1000块钱,来个大保健,正经的")
-
}
-
-
public void buyCar(){
-
system.out.print("1000块钱,租车!")
-
}
-
}
调用
-
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/102570021
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)