car 的速度不同的状态(它有不同的档速,),你想car跑出不同的速度,你可能要用到if else 或者swith 去判断它的档速,
选择怎么跑,使用state模式用来把这些状态抽出来成一组状态的类.
java 代码
- public class Car {
- private CarState speed = new FirstState();
-
- public void change(){
- speed = new SecondState();
- }
- public void speed(){
- speed.speed();
- }
- }
-
- public class FirstState extends CarState{
-
- @Override
- public void speed() {
-
- System.out.println("第一档速度");
- }
-
- }
- public class SecondState extends CarState{
-
- @Override
- public void speed() {
-
- System.out.println("第二档的速度");
- }
-
- }
- public class RunPatternState {
- public static void main(String[] args) {
- Car car = new Car();
- car.speed();
- System.out.println("换档:============");
- car.change();
- car.speed();
- }
-
- }
上面只有两个状态,真实的应该是有很多状态.这里只是举例怎么把不同状态抽出来成一个单独的类.
你完全可以把不同多写这么多类的,完全可在Car的speed()直接用if else,有些类的状态是很多,那会有一大堆if else的
,变得不容易维护.下面把上面的类改造,让它不陷于只能两个状态的
java 代码
- public class Car {
- private CarState speed = new FirstState();
-
- public void change(CarState state){
- speed= state;
- }
- public void speed(){
- speed.speed();
- }
- }
- 增加一个新状状
- public class ThirdState extends CarState{
-
- @Override
- public void speed() {
- System.out.println("第三档速度");
- }
-
- }
- public class RunPatternState {
- public static void main(String[] args) {
- Car car = new Car();
- car.speed();
-
- CarState state = new SecondState();
- car.change(state);
- car.speed();
- CarState state1 = new ThirdState();
- car.change(state1);
- car.speed();
- }
-
- }
刚学习设计模式,不知道我这样理解state模式有没有错.大侠们可以指出