打字猴:1.700473873e+09
1700473873
1700473874 //定义环境角色
1700473875
1700473876 Context context=new Context();
1700473877
1700473878 //初始化状态
1700473879
1700473880 context.setCurrentState(new ConcreteState1());
1700473881
1700473882 //行为执行
1700473883
1700473884 context.handle1();
1700473885
1700473886 context.handle2();
1700473887
1700473888 }
1700473889
1700473890 }
1700473891
1700473892 看到没?我们已经隐藏了状态的变化过程,它的切换引起了行为的变化。对外来说,我们只看到行为的发生改变,而不用知道是状态变化引起的。
1700473893
1700473894
1700473895
1700473896
1700473897 设计模式之禅 [:1700454045]
1700473898 设计模式之禅 26.3 状态模式的应用
1700473899
1700473900 26.3.1 状态模式的优点
1700473901
1700473902 ❑结构清晰
1700473903
1700473904 避免了过多的switch……case或者if……else语句的使用,避免了程序的复杂性,提高系统的可维护性。
1700473905
1700473906 ❑遵循设计原则
1700473907
1700473908 很好地体现了开闭原则和单一职责原则,每个状态都是一个子类,你要增加状态就要增加子类,你要修改状态,你只修改一个子类就可以了。
1700473909
1700473910 ❑封装性非常好
1700473911
1700473912 这也是状态模式的基本要求,状态变换放置到类的内部来实现,外部的调用不用知道类内部如何实现状态和行为的变换。
1700473913
1700473914
1700473915
1700473916
1700473917 设计模式之禅 26.3.2 状态模式的缺点
1700473918
1700473919 状态模式既然有优点,那当然有缺点了。但只有一个缺点,子类会太多,也就是类膨胀。如果一个事物有很多个状态也不稀奇,如果完全使用状态模式就会有太多的子类,不好管理,这个需要大家在项目中自己衡量。其实有很多方式可以解决这个状态问题,如在数据库中建立一个状态表,然后根据状态执行相应的操作,这个也不复杂,看大家的习惯和嗜好了。
1700473920
1700473921
1700473922
[ 上一页 ]  [ :1.700473873e+09 ]  [ 下一页 ]