java 状态模式应用于oa_设计模式之状态模式

1、状态模式的简单介绍:

a、核心:

-  用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。

b、结构:

-  Context 环境类:环境类中维护一个 State 对象,他是定义了当前的状态。

-  State 抽象状态类

-  ConcreteState 具体状态类:每一个类封装了一个状态对应的行为。

2、简单的代码演示:

a、HotelRoomState 接口是 State 抽象状态类,FreeState、CheckedInState、BookedState 类是 ConcreteState 具体状态类。package com.geeklicreed.state;

public interface HotelRoomState {

void handle();

}package com.geeklicreed.state;

public class FreeState implements HotelRoomState {

@Override

public void handle() {

System.out.println("宾馆该房间处于空闲的状态");

}

}package com.geeklicreed.state;

public class CheckedInState implements HotelRoomState{

@Override

public void handle() {

System.out.println("宾馆该房间处于入住状态!");

}

}package com.geeklicreed.state;

public class BookedState implements HotelRoomState{

@Override

public void handle() {

System.out.println("宾馆该房间处于预定状态!");

}

}package com.geeklicreed.state;

public class HotelRoomContext {

private HotelRoomState hotelRoomState;

public void setHotelRoomState(HotelRoomState state){

System.out.println("该宾馆房间的状态已修改");

this.hotelRoomState = state;

hotelRoomState.handle();

}

}

b、看看 Client 测试类输出的结果以及示例的类图关系。package com.geeklicreed.state;

public class Client {

public static void main(String[] args) {

HotelRoomContext context = new HotelRoomContext();

context.setHotelRoomState(new CheckedInState());

System.out.println("------------------------");

context.setHotelRoomState(new BookedState());

/*输出结果为:

该宾馆房间的状态已修改

宾馆该房间处于入住状态!

------------------------

该宾馆房间的状态已修改

宾馆该房间处于预定状态!*/

}

}

3、开发中常见的场景:

-  银行系统中帐号状态的管理

-  OA 系统中公文状态的管理

-  酒店系统中,房间状态的管理

-  线程对象各状态之间的切换

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值