State模式

(1)  State模式定义: 不同的状态,不同的行为; 或者说,每个状态有着相应的行为. 
适用场合:  State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了. 
-->适合于内部状态,不断循环变化的. 
(2) 
一个state,包括两部分: 对象 + 对象内部的属性(属性接口+具体属性) 
一个对象,要有其属性,以及其setter,getter.且设置好其初始状态+一个调用显示状态的方法(里面就是状态调用自身的显示方法). 
一个属性接口,应该有一个执行的方法. 
一个具体属性,须包含对象进去,实现方法中,须设置对象下一个要显示的属性-->从而在对象下次调用方法时,其属性值会变化. 

状态模式与观察者模式的区别: 
状态模式,也跟观察者模式一样,是一对多的模式。但观察者模式是“一”变了,所有的“多”也会更新。 
状态模式,强调的是:“多”是“一”的各个状态,“一”的各个状态,进行不断的循环。 

如何建立一与多的关系: 
“多”,都是实现一个接口的。所以,在“一”的类中,声明的是“多”的接口;若“多”中要建立与“一”的关系,只须直接在类中声明“一”即可。 


(3)  代码: 

1)接口

public interface Color { 

    public void show(); 


package state; 

class Light 

    Color color; 

    public Light() 
    { 
      color=new RedColor(this); 
    } 

    public Color getColor() { 
      return color; 
    } 

    public void setColor(Color color) { 

      this.color = color; 
    }   
    public void showColor() 
      color.show(); 
    } 


class RedColor implements Color 
    Light light; 
    public RedColor(Light light) 
      this.light=light; 
    } 

    public void show() 

         System.out.println("the color is red,the car must stop !"); 
         System.out.println("write down all logic shoud do this in this state....."); 
         light.setColor(new GreenColor(light)); 
    } 


class GreenColor implements Color 
Light light; 
public GreenColor(Light light) 

  this.light=light; 

public void show() 

System.out.println("the color is green,the car can run !"); 
System.out.println("write down all logic shoud do this in this state....."); 
  light.setColor(new YellowColor(light)); 


class YellowColor implements Color 

Light light; 
public YellowColor(Light light) 

  this.light=light; 

public void show() 

System.out.println("the color is yellow,the car shoud stop !"); 
System.out.println("write down all logic shoud do this in this state....."); 
  light.setColor(new RedColor(light)); 


public class CarLight { 
public static void main(String[] args) { 
  Light light=new Light(); 
  
  //初始调用为红灯 
  light.showColor(); 
  //再调用为绿灯 
  light.showColor(); 
  //再调用为黄灯 
  light.showColor(); 
  //不断调用,不断循环.  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值