当前位置: 首页 > 后端技术 > Java

实践项目中的java设计形式——状态形式

时间:2023-04-01 19:01:34 Java

实践项目中的java设计形式——状态形式直接进入正题优缺点优点:将与状态相关的行为进行部分划分,将不同的状态分开,消除了一个巨大的条件分支语句被创建,逻辑通过各个状态分发到状态。方便的后期维护代码。添加新状态非常容易,也很容易扩展。缺点:势必会增加系统中类和对象的数量。由于多个状态可以相互切换,使用不当会导致系统复杂度增加,可读性差。所有这些都需要良好的代码技能和全面的设计。在详细讲解状态模式之前,先了解一下AlbumCameraRecorder项目的一个简单逻辑。本项目有一个拍摄类CameraLayout,需要根据拍摄照片、拍摄视频等不同的当前状态进行处理。让我们开始吧!StateInterface状态接口publicinterfaceStateInterface{/***提交中心任务*/voidpvLayoutCommit();/***取消中心任务*/voidpvLayoutCancel();}复制代码StateMode状态抽象父类publicabstractclassStateMode实现StateInterface{/***子类使用,cameraLayout是处理逻辑,cameraStateManagement是处理状态转换*/CameraStateManagementcameraStateManagement;CameraLayoutcameraLayout;}复制多个状态子类的代码,提取两个Preview和VideoInpublic类PreviewextendsStateMode{@OverridepublicvoidpvLayoutCommit(){//处理逻辑cameraLayout.xxxx();//改变录像状态cameraStateManagement.setState(cameraStateManagement.getVideoIn());}@OverridepublicvoidpvLayoutCancel(){//处理逻辑cameraLayout.xxxx();}}复制代码publicclassVideoInextendsStateMode{@OverridepublicvoidpvLayoutCommit(){//处理逻辑cameraLayout.xxxx();//改变录像状态cameraStateManagement.setState(cameraStateManagement.getPreview());}@OverridepublicvoidpvLayoutCancel(){//处理逻辑cameraLayout.xxxx();}}复制代码CameraLay公共类CameraLayout{/***状态管理*/publicfinalCameraStateManagementmCameraStateManagement;publicvoidcommit(){//处理当前状态的对应逻辑mCameraStateManagement.pvLayoutCommit();}publicvoidcancel(){//处理当前状态的对应逻辑mCameraStateManagement.pvLayoutCancel();}}复制代码CameraStateManagement状态管理publicclassCameraStateManagementimplementsStateInterface{CameraLayoutmCameraLayout;/***当前状态*/StateInterface状态;/***预览状态*/StateInterface预览;/***录制视频状态*/StateInterfacevideoIn;publicCameraStateManagement(CameraLayoutcameraLayout){mCameraLayout=cameraLayout;//初始化相关状态逻辑preview=newPreview(cameraLayout,this);videoIn=newVideoIn(cameraLayout,this);//设置当前默认状态state=preview;}/***@return当前状态*/publicStateInterfacegetState(){returnstate;}/***分配当前状态*/publicvoidsetState(StateInterfacestate){this.state=state;}@OverridepublicvoidpvLayoutCommit(){state.pvLayoutCommit();}@OverridepublicvoidpvLayoutCancel(){state.pvLayoutCancel();}}复制代码,那么这个表单的中心代码就在这里,修改代码的作者不管是维护还是添加都很热情代码,这就是优雅代码的好处!也欢迎朋友们指出更好的改进,喜欢点个收藏,谢谢支持!