状态模式

简介: 定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类结构:就是在把所有情况拆分成多个类,在调用时把这些类分别set进去。


定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

结构:就是在把所有情况拆分成多个类,在调用时把这些类分别set进去。

场景:在玩lol时 有攻击,行走,技能使用,那么按照状态模式分,就分为正常时三个行为的状态,被控制是这三个行为的状态,被眩晕时这三个行为的状态。

优点:1.减少if else的使用

          2.减少耦合度,是扩展更容易

缺点:使类增多,结构变复杂。

类图:

image.png

代码:

Context

1. public classs 我{
2. 
3. private Grade grade;
4. 
5. public void setGrade(Grade grade) {
6. this.grade= grade;
7.     }
8. //打扮
9. void dressUp(
10.       grade.dressUp();
11.    );
12. 
13. //娱乐
14. void entertainment(Grade grade){
15.       grade.dressUp();
16.    }
17. 
18. //买车
19. void buyCar(
20.      grade.buyCar();
21.    );
22. 
23. 
24. }

策略接口

1. public interface Grade(
2. 
3. public void dressUp();
4. 
5. public void entertainment();
6. 
7. public void buyCar();
8. 
9. )

策略实现

1. public class has10 implements Grade{
2. 
3. public void dressUp(){
4.           system.out.print("10块钱,来个跨栏背心得了")
5.        }
6. 
7. public void entertainment(){
8.           system.out.print("10块钱保健啥,洗个澡吧")
9.        }
10. 
11. public void buyCar(){
12.           system.out.print("10块钱,坐公交吧")
13.        }
14. 
15. }
1. public class has100 implements Grade{
2. 
3. public void dressUp(){
4.           system.out.print("100块钱,来个山寨耐克")
5.        }
6. 
7. public void entertainment(){
8.           system.out.print("100块钱,按个脚吧")
9.        }
10. 
11. public void buyCar(){
12.           system.out.print("100块钱,打车!")
13.        }
14. }
1. public class has1000 implements Grade{
2. 
3. public void dressUp(){
4.           system.out.print("1000块钱,来个正品的361度")
5.        }
6. 
7. public void entertainment(){
8.           system.out.print("1000块钱,来个大保健,正经的")
9.        }
10. 
11. public void buyCar(){
12.           system.out.print("1000块钱,租车!")
13.        }
14. }

调用

1. public static void main(String[] args) {
2.           我 me = new 我();
3. me.setGrade(new has10());
4. me.entertainment();
5. me.dressUp();
6. me.setGrade(new has100());
7. me.entertainment();
8.        }

 


相关文章
|
6月前
|
设计模式 算法
状态模式和策略模式有什么区别
状态模式和策略模式有什么区别
121 1
|
1月前
|
设计模式 算法 C#
C# 一分钟浅谈:策略模式与状态模式
【10月更文挑战第13天】本文介绍了两种常见的行为型设计模式:策略模式和状态模式。策略模式通过封装一系列算法并使其可互换,实现算法的灵活变化;状态模式则通过改变对象的内部状态来改变其行为。文章通过C#代码示例详细说明了这两种模式的应用场景、常见问题及解决方法。
53 19
|
6月前
行为型 状态模式
行为型 状态模式
42 0
|
11月前
|
前端开发
状态模式
状态模式
47 0
|
设计模式 JavaScript
关于状态模式我所知道的
关于状态模式我所知道的
62 0
|
设计模式 算法 Java
状态模式和策略模式的区别与联系
UML 状态模式是策略模式的孪生兄弟,是因为它们的UML图是一样的。但意图却完全不一样,策略模式是让用户指定更换的策略算法,而状态模式是状态在满足一定条件下的自动更换,用户无法指定状态,最多只能设置初始状态。
|
设计模式
我学会了,状态模式
状态模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
115 0
我学会了,状态模式
|
存储 程序员 开发工具
状态模式与备忘录模式(2)
状态模式与备忘录模式(2)
146 0
状态模式与备忘录模式(2)
|
存储 Java Spring
状态模式与备忘录模式(3)
状态模式与备忘录模式(3)
140 0
状态模式与备忘录模式(3)