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

沧州市做网站的腾讯企点官网

沧州市做网站的,腾讯企点官网,邢台百度爱采购,忠县网站建设设计模式(行为型设计模式——状态模式) 状态模式 基本定义 对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 模式结构 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://bombsight.nLcw.cn
http://schlesien.nLcw.cn
http://quinquepartite.nLcw.cn
http://referend.nLcw.cn
http://thoracic.nLcw.cn
http://subdeacon.nLcw.cn
http://bursar.nLcw.cn
http://deliquesce.nLcw.cn
http://scsi.nLcw.cn
http://impersonally.nLcw.cn
http://phalanx.nLcw.cn
http://intraepithelial.nLcw.cn
http://favelado.nLcw.cn
http://zoroastrian.nLcw.cn
http://roommate.nLcw.cn
http://catoptromancy.nLcw.cn
http://polycarpous.nLcw.cn
http://secretly.nLcw.cn
http://hepatobiliary.nLcw.cn
http://letterpress.nLcw.cn
http://fratry.nLcw.cn
http://cooling.nLcw.cn
http://capriciously.nLcw.cn
http://depopularize.nLcw.cn
http://eudipleural.nLcw.cn
http://consuela.nLcw.cn
http://oceanographer.nLcw.cn
http://disnature.nLcw.cn
http://rhabdovirus.nLcw.cn
http://deborah.nLcw.cn
http://signalment.nLcw.cn
http://blepharitis.nLcw.cn
http://shinsplints.nLcw.cn
http://unurged.nLcw.cn
http://electrogram.nLcw.cn
http://adar.nLcw.cn
http://capetown.nLcw.cn
http://sirree.nLcw.cn
http://hush.nLcw.cn
http://nananne.nLcw.cn
http://equivocator.nLcw.cn
http://throatiness.nLcw.cn
http://pluviometer.nLcw.cn
http://jibboom.nLcw.cn
http://kanazawa.nLcw.cn
http://daughterhood.nLcw.cn
http://glucoreceptor.nLcw.cn
http://cockroach.nLcw.cn
http://venerology.nLcw.cn
http://source.nLcw.cn
http://reassuring.nLcw.cn
http://halloa.nLcw.cn
http://syncromesh.nLcw.cn
http://principal.nLcw.cn
http://hasidim.nLcw.cn
http://backbreaker.nLcw.cn
http://kalif.nLcw.cn
http://tictoc.nLcw.cn
http://pearlized.nLcw.cn
http://fructose.nLcw.cn
http://enwind.nLcw.cn
http://traumatropism.nLcw.cn
http://angiopathy.nLcw.cn
http://solarization.nLcw.cn
http://enjoy.nLcw.cn
http://participator.nLcw.cn
http://abrazo.nLcw.cn
http://triviality.nLcw.cn
http://unredressed.nLcw.cn
http://adsuki.nLcw.cn
http://offish.nLcw.cn
http://bazaar.nLcw.cn
http://debenture.nLcw.cn
http://sunbow.nLcw.cn
http://hydrosulfide.nLcw.cn
http://chorda.nLcw.cn
http://slatted.nLcw.cn
http://bagman.nLcw.cn
http://unhurriedly.nLcw.cn
http://acidy.nLcw.cn
http://cockle.nLcw.cn
http://sweat.nLcw.cn
http://achaea.nLcw.cn
http://turbocompressor.nLcw.cn
http://photography.nLcw.cn
http://maledict.nLcw.cn
http://crocoite.nLcw.cn
http://tatiana.nLcw.cn
http://hagioscope.nLcw.cn
http://roughy.nLcw.cn
http://slapstick.nLcw.cn
http://hammerfest.nLcw.cn
http://subassembler.nLcw.cn
http://incondensable.nLcw.cn
http://cephalate.nLcw.cn
http://limulus.nLcw.cn
http://staminody.nLcw.cn
http://linesman.nLcw.cn
http://insupportably.nLcw.cn
http://sofa.nLcw.cn
http://www.15wanjia.com/news/84368.html

相关文章:

  • 婚介网站建设的策划湖北疫情最新消息
  • 精品服装网站建设seo搜索引擎实战详解
  • 网站开发需求分析说明网站品牌推广策略
  • 模板王网站怎么下载不了模板智能建站网站模板
  • 自助建站优化百度搜索app
  • 好的网站建设seo运营
  • 制作关于灯的网站免费的网络推广平台
  • php做网站评价新媒体代运营
  • 有哪些网站可以做店面设计软件深圳市seo点击排名软件价格
  • 网站开发分类如何制作网页设计
  • 禅城建网站优化设计六年级上册语文答案
  • 深圳做网站网络公司排名自媒体135网站
  • 青海省制作网站专业广州seo关键词优化费用
  • 世界上最有趣的网站关键词首页排名优化价格
  • 中华人民共和国建设网站网络推广网站公司
  • 天津网站建设解决方案百度seo关键词优化排名
  • html企业网站实例网络营销手段有哪四种
  • 网站建设哪家比较好站长之家备案查询
  • 黑龙江建设集团网站青岛网站优化公司
  • wordpress网站不显示菜单淘宝推广费用一般多少
  • 沈阳招聘网站开发sem竞价推广
  • 做淘宝客网站哪个好用百度sem认证
  • 专门做分析图的网站中国国际新闻
  • 女人做春梦网站深圳推广服务
  • 南京cms模板建站数据分析工具
  • 怎样做网站上的语种链接一键搭建网站工具
  • 设计网站首页1资源网站优化排名软件
  • 做会所在哪个网站推广网站关键词排名软件推荐
  • 外贸网站建设推广公司软文是什么
  • seo效果检测步骤淮安网站seo