zoukankan      html  css  js  c++  java
  • java设计模式----状态模式

     状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。

    策略模式和状态模式有点相似,区别就是状态模式是行为改变状态,主要在于状态改变行为的应用场景,而策略模式则是采用哪种算法,让Context去实现哪种算法,决定权在于客户端。状态模式的行为是平行的,不可相互替换的;而策略模式的行为是平等性的,是可以相互替换的

    主要有三个角色:

    环境角色(Context):保留客户端所需要的一些接口,并保留一个具体状态类的实例。

    package design.state;
    
    public class Context {
    	private State state;
    
    	public void setState(State state) {
    		this.state = state;
    	}
    	//定义客户端调用接口
    	public void request(String para){
    		state.handle(para);
    	}
    }
    

      

    抽象状态角色(State):作为一个接口,封装环境对象的一个特定的状态所对应的行为。

    package design.state;
    
    public interface State {
    	public void handle(String para);
    
    }
    

      

    具体状态角色(ConcreteState):实现具体的接口定义行为。

    package design.state;
    
    public class ConcreteStateA implements State{
    
    	@Override
    	public void handle(String para) {
    		System.out.println("ConcreteStateA handle:"+para);
    	}
    
    }
    

      

    package design.state;
    
    public class ConcreteStateB implements State{
    
    	@Override
    	public void handle(String para) {
    		System.out.println("ConcreteStateB handle:"+para);
    	}
    
    }
    

    测试

    package design.state;
    
    public class Client {
    	public static void main(String[] args) {
    		//创建状态
    		State state=new ConcreteStateA();
    		State state1=new ConcreteStateB();
    		//创建环境
    		Context context=new Context();
    		 //设置状态
    		context.setState(state);
    		//请求
    		context.request("test");
    		//设置状态
    		context.setState(state1);
    		//请求
    		context.request("test");
    	}
    
    }
    

      

    结果

    ConcreteStateA handle:test
    ConcreteStateB handle:test
    

      

  • 相关阅读:
    Hash工具下载地址
    微信聊天记录查看器(程序+源码)
    XEN的启动信息输出到“Platform timer is 14.318MHz HPET”就暂停接收的解决办法
    利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境
    Windows内核开发中如何区分文件对象究竟是文件还是文件夹?
    白盒密码入门
    选择Asp for javascript,非.net。
    8个你至少应该参加一次的极客盛会
    程序员的四种类型
    超棒的30款JS类库和工具
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5219589.html
Copyright © 2011-2022 走看看