ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大话设计模式之状态模式

2020-04-03 17:55:12  阅读:154  来源: 互联网

标签:状态 大话 state 模式 State sh void 设计模式 public


1:状态模式的类图设计

类图地解释:

  1. State接口和Context类地关系:其中State接口中依赖于Context因为State中Handle方法要使Context的状态变化,所以其形参为Context类型,变化的实质就是内部State引用指向不同对象的变化。而Context类内部有一个State接口的引用,因为Context中状态变化的实质就是State引用指向不同的State对象。
  2. State接口:所有状态类都要实现该接口,这样子才能统一使用,并且对于Context来说不需要认识不同的状态,状态如何切换?如何变化?是不同状态之间的事情,完美实现的单一原则。

2:状态模式的代码实现

  状态模式将特定的行为局部化,只有状态之间知道如何转换状态,对外部变化为状态变化,同时不同状态的行为通过类进行了切割和分离。通过状态的分离,减少了判断语句,同时减少了代码之间的依赖。当一个对象的行为取决于状态,同时状态必须能够在运行期间改变它的行为,就可以使用状态模式了。

3:状态模式的代码实现

package statePattern;

/**
 * @author :dazhu
 * @date :Created in 2020/4/3 16:38
 * @description:
 * @modified By:
 * @version: $
 */
//主类
public class Main {
    public static void main(String[]args){
        State1 s1 = new State1();
        StateHolder sh = new StateHolder(s1);
        sh.disPlay();

        //不断地请求,不断地展示
        sh.changeState();
        sh.disPlay();

        sh.changeState();
        sh.disPlay();

        sh.changeState();
        sh.disPlay();

        sh.changeState();
        sh.disPlay();
    }
}
//接口类
/**
 * 状态的接口,所有不同的状态都要实现这个接口
 * 接口里有什么尼?
 */
public interface State {
    public  void showSelf();
    public void Handle(StateHolder sh);
}
//状态类
public class State1 implements State{

    @Override
    public void Handle(StateHolder sh) {
        sh.state = new State2();
    }

    @Override
    public void showSelf() {
        System.out.println("State1");
    }
}
public class State2 implements State{
    @Override
    public void Handle(StateHolder sh) {
        sh.state = new State3();
    }

    @Override
    public void showSelf() {
        System.out.println("State2");
    }
}
public class State3 implements State{
    @Override
    public void Handle(StateHolder sh) {
        sh.state = new State4();
    }

    @Override
    public void showSelf() {
        System.out.println("State3");
    }
}
public class State4 implements State{

    @Override
    public void Handle(StateHolder sh) {
        sh.state = new State1();
    }
    @Override
    public void showSelf() {
        System.out.println("State4");
    }
}
//状态拥有者
public class StateHolder {
    public State state = null;
    //构造方法,用来初始化状态持有则,
    public StateHolder(State state){
        this.state = state;
    }


    //切换自己的状态
    public void changeState(){
        state.Handle(this);
    }

    //显示自己的状态
    public void disPlay(){
        state.showSelf();
    }
}

 

标签:状态,大话,state,模式,State,sh,void,设计模式,public
来源: https://www.cnblogs.com/dazhu123/p/12627914.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有