当前位置: 首页 > news >正文

wordpress主题导入Demo深圳做网站优化费用

wordpress主题导入Demo,深圳做网站优化费用,合肥全网推广,页面设计简历设计模式(行为型设计模式——状态模式) 状态模式 基本定义 对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 模式结构 Context(环境类)&…

设计模式(行为型设计模式——状态模式)

状态模式

基本定义

对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。

模式结构

  • Context(环境类):可以包括一些内部状态。

  • State(抽象状态类):所有具体状态的共同接口,任何状态都实现这个相同的接口,状态之间互相转换。

  • ConcreteState(具体状态类):用于处理来自Context的请求,每一个ConcreteState都提供了它对自己请求的实现,

代码实现

State 抽象状态类
public interface State {//预定房间void reservationRoom();//退订房间void unsubscribeRoom();//入住void checkinRoom();//退房void checkoutRoom();
}
ConcreteState 具体状态类
空闲状态
@Slf4j
public class FreeState implements State{Room room;public FreeState(Room room) {this.room = room;}/*** 房间状态改变,还需修改内部状态*/@Overridepublic void reservationRoom() {log.info("您已预定房间");room.setState(room.reservationState);}@Overridepublic void unsubscribeRoom() {}@Overridepublic void checkinRoom() {log.info("您已入住成功");room.setState(room.checkinState);}@Overridepublic void checkoutRoom() {}
}
预定状态
@Slf4j
public class ReservationState implements State{Room room;public ReservationState(Room room) {this.room = room;}@Overridepublic void reservationRoom() {log.error("预定失败,该房间已经被预定");}@Overridepublic void unsubscribeRoom() {log.info("您已经取消预定");room.setState(room.freeState);}@Overridepublic void checkinRoom() {log.info("您已入住成功");room.setState(room.checkinState);}@Overridepublic void checkoutRoom() {}
}
入住状态
@Slf4j
public class CheckinState implements State{Room room;public CheckinState(Room room) {this.room = room;}@Overridepublic void reservationRoom() {log.error("预定失败,该房间已经入住");}@Overridepublic void unsubscribeRoom() {}@Overridepublic void checkinRoom() {log.error("入住失败,该房间已经入住");}@Overridepublic void checkoutRoom() {log.info("您已退房");room.setState(room.freeState);}
}
Context 环境类
/**
* 状态模式特点一、除了关联抽象状态,还需要关联我们具体状态。
* 状态模式特点二, 提供所有的抽象与具体的状态类。并且在无参构造方法初始化状态类。
* 还需要提供所有属性的set方法,供状态类使用,需要提供调用状态类的方法。
**/
@Slf4j
public class Room{State state;/*** 状态模式特点一、除了关联抽象状态,还需要关联我们具体状态*/State freeState;State reservationState;State checkinState;//初始化全部状态,且绑定关系public Room() {freeState = new FreeState(this);reservationState = new ReservationState(this);checkinState = new CheckinState(this);state = freeState;}public void setState(State state) {this.state = state;}/*** 核心方法* @return*/public State getState() {return state;}public void setFreeState(State freeState) {this.freeState = freeState;}public void setReservationState(State reservationState) {this.reservationState = reservationState;}public void setCheckinState(State checkinState) {this.checkinState = checkinState;}public void reservationRoom() {state.reservationRoom();}public void unsubscribeRoom() {state.unsubscribeRoom();}public void checkinRoom() {state.checkinRoom();}public void checkoutRoom() {state.checkoutRoom();}public void showCurrState(){log.info("当前房间状态 {}", this.state.getClass().getSimpleName());}
}
测试类
public class Test {public static void main(String[] args) {Room room = new Room();room.reservationRoom();room.showCurrState();room.checkinRoom();room.showCurrState();room.checkinRoom();room.checkoutRoom();room.showCurrState();}
}
输出结果

FreeState - 您已预定房间

Room - 当前房间状态 ReservationState

ReservationState - 您已入住成功

Room - 当前房间状态 CheckinState

CheckinState - 入住失败,该房间已经入住

CheckinState - 您已退房

Room - 当前房间状态 FreeState

优点

  • 状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。

  • 减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。

  • 有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。

缺点

  • 状态模式的使用必然会增加系统的类与对象的个数。
  • 状态模式的结构与实现都较为复杂。

适用场景

  • 当对象的状态很多时,程序会变得很复杂。而且增加新的状态要添加新的 if-else 语句,这违背了“开闭原则”,不利于程序的扩展。

  • 对象的行为依赖于它的状态并且可以根据它的状态改变而改变它的相关行为。

总结

  • 状态模式允许一个对象基于内部状态而拥有不同的行为。
  • Context会将行为委托给当前状态对象。
http://www.yayakq.cn/news/9620/

相关文章:

  • 门户网站模式网站访客qq获取原理
  • 宁波网站建设方案推广网站开发与维护就业前景
  • 大连网站建设培训东莞百度seo关键词优化
  • 公司做网站 手机 电脑免费的app软件下载网站
  • 怎么做一个免费的网站保定网站建设方案外包
  • 泉港区规划建设局网站成都建好的网站出租
  • 都匀经济开发区建设局网站wordpress主题微信验证码
  • 网站建设与维护婚庆网站开发的意义
  • 重庆云阳网站建设价格网页制作官方网站
  • 天津西青网站建设公司建筑工程网手机版
  • 网站建设 网站美容店网站建设
  • 海南响应式网站建设方案中企动力企业邮箱怎么样
  • 济南网站排名外包网站安全建设方案报告
  • 深圳网站备案拍照有没有做任务的网站吗
  • 公司网站排名怎样才能把网站做好
  • 邯郸专业网站建设深圳装修公司大全
  • 目前比较流行的公司网站建站技术软文推广发稿
  • 问答类网站怎么做怎样弄一个自己的网站
  • 邓州做网站网站建设方案书含合同
  • 做汽配找哪个网站好泰安公司网站建设
  • 网站开发连接数据库服务器安装wordpress
  • 上海 企业 网站建设山西两学一做网站登录
  • android 旅游网站开发网站建设属于高新技术收入吗
  • html5建一个网站高端大气的网站
  • 石家庄定制建站做网站用的一些素材
  • 小米手机的网站架构怎么找个人搭建网站
  • 环保部网站官网建设项目审批代理加盟做什么好
  • 电子商务网站建设实训报告友链互换平台推荐
  • 怎样改网站英文域名yellow免费观看高清
  • 井研移动网站建设深圳品牌做网站