策略模式和状态模式的类图相同,目的都是为了解耦,但是还有很多的区别
策略模式
1. public classs 我{ 2. 3. //打扮 4. void dressUp(); 5. 6. //娱乐 7. void entertainment(Grade grade){ 8. grade.entertainment(); 9. } 10. 11. //买车 12. void buyCar(); 13. 14. 15. }
策略接口
1. public interface Grade( 2. 3. public void hasMoney(); 4. 5. )
策略实现
1. public class has10 implements Grade{ 2. public void entertainment(){ 3. system.out.print("10块钱保健啥,洗个澡吧") 4. } 5. }
1. public class has100 implements Grade{ 2. public void entertainment(){ 3. system.out.print("100块,按个脚吧") 4. } 5. }
1. public class has1000 implements Grade{ 2. public void entertainment(){ 3. system.out.print("1000块,那就来个大保健吧") 4. } 5. }
调用
1. public class Client { 2. 3. public static void main(String[] args) { 4. 我 me = new 我(); 5. me.entertainment(new has10()); 6. me.entertainment(new has100()); 7. }
可以看到只有针对娱乐有不同方法,而其他的项目没有影响,此为策略模式
状态模式
我类的修改
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(Healthcare healthcare){ 15. grade.dressUp(); 16. } 17. 18. //买车 19. void buyCar( 20. grade.buyCar(); 21. ); 22. 23. 24. }
调用
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. }
可以看到每一次的变化,我的整个档次都变了,无论是娱乐还是穿衣服,所以此为状态模式