状态者模式
本章任务
1.状态者模式的定义
状态者模式:不同的状态,不同的行为;或者说,每个状态有着相应的行为. 。
2.解决我们经常会使用If elseif else 进行状态切换, 且状态的切换反复出现。
eg:"hello"-->"hi"-->"bye"-->"hello"的排列组合
package com.aptech.behavior.state;
/**
*
* 文件名: IShopState.java
* 版权: 方勇
* 描述:状态者模式--模拟购物的三个状态(购物状态,结账状态,付款状态)
* 纯有上面一种将"hello"-->"hi"-->"bye"-->"hello"这一个方向切换,
* 也不一定需要使用State模式,因为State模式会建立很多子类,复杂化,
* 但是如果又发生另外一个行为:将上面的切换方向反过来切换,
* 或者需要任意切换,就需要State了.
* Email:fangyong2006@163.com
* 修改时间: 2010-7-9下午08:07:46
*/
public interface IShopState {
//购物状态
public void shop();
//结账状态
public void generateBill();
//付款状态
public void pay();
}
package com.aptech.behavior.state;
/**
*
* 文件名: ShopState.java
* 版权: 方勇
* 描述:The parent class of state
* Email:fangyong2006@163.com
* 修改时间: 2010-7-9下午08:57:50
*/
public class ShopState implements IShopState {
public ShopState() {
}
public void shop() {
}
public void generateBill() {
}
public void pay() {
}
/**
*
* 〈状态的切换〉
*
* @param [ShopContext] [状态管理的上下文]
* @param [ShopState] [所有的的购物状态]
* @return [void]
* @Author 方勇
* Email:fangyong2006@163.com
*/
protected void changeState(ShopContext c, ShopState s) {
c.changeState(s);
}
}
package com.aptech.behavior.state;
/**
*
* 文件名: ShopContext.java
* 版权: 方勇
* 描述:状态上下文切换管理器
* Email:fangyong2006@163.com
* 修改时间: 2010-7-9下午09:07:10
*/
public class ShopContext {
//正在进行的状态
private ShopState currentState;
public ShopContext() {
}
/**
*
* 〈状态的切换〉
* @param [ShopState] [正在进行的状态]
* @return [void]
* @Author 方勇
* Email:fangyong2006@163.com
*/
public void changeState(ShopState s) {
currentState = s;
}
public void shop() {
currentState.shop();
}
public void generateBill() {
currentState.generateBill();
}
public void pay() {
currentState.pay();
}
}
package com.aptech.behavior.state;
/**
*
* 文件名: Shop.java
* 版权: 方勇
* 描述:购物状态操作流程
* Email:fangyong2006@163.com
* 修改时间:2010-7-9下午08:52:11
*/
public class Shop extends ShopState {
public static boolean instanceFlag = false; //true if have 1 instance
private Shop() {
}
public static Shop getInstance() {
if(! instanceFlag) {
instanceFlag = true;
return new Shop();
}
return null;
}
@Override
public void shop() {
System.out.println("The state is shopping now !");
}
}
package com.aptech.behavior.state;
/**
*
* 文件名: GenerateBill.java
* 版权: 方勇
* 描述:结账状态操作流程
* Email:fangyong2006@163.com
* 修改时间: 2010-7-9下午08:55:34
*/
public class GenerateBill extends ShopState {
public static boolean instanceFlag = false; // true if have 1 instance
private GenerateBill() {
}
public static GenerateBill getInstance() {
if (!instanceFlag) {
instanceFlag = true;
return new GenerateBill();
}
return null;
}
public void generateBill() {
System.out.println("The state is generating bill now !");
}
}
package com.aptech.behavior.state;
/**
*
* 文件名: Pay.java
* 版权: 方勇
* 描述:付款状态操作
* Email:fangyong2006@163.com
* 修改时间: 2010-7-9下午08:16:15
*/
public class Pay extends ShopState {
public static boolean instanceFlag = false; //true if have 1 instance
private Pay() {
}
public static Pay getInstance() {
if(! instanceFlag) {
instanceFlag = true;
return new Pay();
}
return null;
}
public void pay() {
System.out.println("The state is pay now !");
}
}
package com.aptech.behavior.state;
import junit.framework.TestCase;
public class StateTest extends TestCase {
protected void setUp() throws Exception {
super.setUp();
}
public void testState(){
//实例化状态管理的上下文
ShopContext myContext = new ShopContext();
//状态的实例化
ShopState myShop = Shop.getInstance();
ShopState myGenBill = GenerateBill.getInstance();
ShopState myPay = Pay.getInstance();
//切换为购物状态
myContext.changeState(myShop);
myContext.shop();
//切换为结账状态
myContext.changeState(myGenBill);
myContext.generateBill();
//切换为付款状态
myContext.changeState(myPay);
myContext.pay();
}
}
本章目标
1. 理解状态者模式
分享到:
相关推荐
• Norm 1: Be more transparent than in the past 比过去更加透明 • Norm 2: Establish and enforce standardized procedures for effective oversight and strong accountability 建立并执行标准化程序,加强有效...
1. **状态(State)** - 表示系统的某个特定阶段或条件。每个状态都可以有一个或多个进入和退出条件,以及一个执行过程。 2. **行为(Behavior)** - 定义系统应如何响应特定的输入或事件。行为可以是单个操作,也...
行为树(Behavior Trees,简称BTs)是机器人学和人工智能(AI)中用以表示和设计复杂系统行为的架构。它们在管理智能体的行为决策上,相较于传统方法如有限状态机(Finite State Machines,简称FSMs),拥有更好的...
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } else { bottomSheetBehavior.setState...
安装执行以下命令来安装FlexBE: roscd && cd ../srcgit clone https://github.com/team-vigir/flexbe_behavior_engine.git 此外,为行为开发创建自己的存储库(包含示例): rosrun flexbe_widge
signal current_state, next_state : state_type; -- 当前状态和下一状态信号 begin process (clk) begin if rising_edge(clk) then if reset = '1' then current_state ; else current_state <= next_...
Behavior Designer支持与Unity内置的状态机(State Machine)集成,允许更灵活的角色行为管理。 7. **学习资源**: 提供的“Behavior Designer中文版教程.pdf”应包含详细的操作指南、实例演示和最佳实践,帮助...
behavior.setState(BottomSheetBehavior.STATE_EXPANDED); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.show(); } }); ``` ```kotlin // Kotlin ...
- 通过Java或Kotlin代码,你可以获取`BottomSheetBehavior`实例,进一步控制它的状态,例如`BottomSheetBehavior.setState(State.EXPANDED)`来展开,`setState(State.HIDDEN)`来隐藏。 4. **自定义BottomSheet**:...
2.7 Graphical Solution of a Biaxial State of Stress: the Mohr Circle 89 2.8 Pure Shear: Relationship between G and E 95 2.9 Anisotropic Effects 96 2.10 Elastic Properties of Polycrystals 107 2.11 ...
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); // 设置监听器,以便在开关按钮点击时控制滑动栏的状态 SwitchMaterial switchButton = findViewById(R.id.switch_button); switchButton....
行为树 这个C ++ 14库提供了一个创建BehaviorTrees的框架。 它设计灵活,易于使用,ReactSwift。 即使我们的主要用例是机器人技术,您也可以使用此库来构建游戏的AI或替换应用程序中的有限状态机。 与其他实现相比,...
case BottomSheetBehavior.STATE_DRAGGING: state = "拖曳中"; break; case BottomSheetBehavior.STATE_SETTLING: state = "设置中"; break; case BottomSheetBehavior.STATE_EXPANDED: state = "展开"; ...
- 行为(Behavior):每个状态下允许的动作或功能。 "Coke Machine State Machine" 可能包含一个详细的图形表示,例如UML状态图,用来清晰地展示这些状态、事件、转换和行为之间的关系。通过这样的模型,开发者可以...
行为树工具包 :evergreen_tree: 框架不可知行为树实现 :atom_symbol: -Hooks和docs如何在React中使用BT快速开始npm install @btree/core import { nodes } from '@btree/core'const initialState = { isLoggedIn : ...
6. **自定义行为(Custom Behavior)**: 除了内置的行为,Stateflow还允许通过编写MATLAB代码实现自定义行为。 应用实例部分可能涵盖了以下主题: - **交通信号灯控制系统**:展示如何使用Stateflow构建一个简单...
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); // 或STATE_EXPANDED bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public ...
3. **状态机(State Machine)**:可能用于管理角色的不同行为状态,如巡逻、追逐、逃避等。 4. **感知系统(Sensing System)**:让NPC能够感知环境和其它对象,如检测玩家、声音或视觉刺激。 5. **决策逻辑...