`

状态模式之编码实现示例

阅读更多

源码:

 

public class StatePattern {
	interface Position{		
		public String getNextPostion(Programer p);
		public String getLastPostion(Programer p);
	}

	class Manager implements Position{
		public String getNextPostion(Programer p) {
			p.position = new General();
			return "项目总监";
		}

		public String getLastPostion(Programer p) {		
			p.position = new GroupLeader();
			return "项目组长";
		}
	}

	class Coder implements Position{
		public String getNextPostion(Programer p) {
			p.position = new GroupLeader();
			return "项目组长";
		}

		public String getLastPostion(Programer p) {	
			p.position = new Coder();
			return "Coder";
		}
	}

	class GroupLeader implements Position{
		public String getNextPostion(Programer p) {
			p.position = new Manager();
			return "项目经理";
		}

		public String getLastPostion(Programer p) {	
			p.position = new Coder();
			return "Coder";
		}
	}

	class General implements Position{
		public String getNextPostion(Programer p) {				
			return "CTO";
		}

		public String getLastPostion(Programer p) {	
			p.position = new Manager();
			return "项目经理";
		}
	}

	class Programer{
		private Position position;
		
		public Programer(){
			System.out.println("我成程序员了,现在还只是Coder.");
			position = new Coder();
		}
		
		public void raised(){			
			System.out.println("我升职了,现在的职位是:"+position.getNextPostion(this));
		}
		public void fall(){			
			System.out.println("悲剧了,我降职了,现在的职位是:"+position.getLastPostion(this));
		}
		
		public void workHard(){
			System.out.println("努力工作.....");
		}
		
		public void worklazy(){
			System.out.println("工作太累了,先玩会再说.....");
		}
		
		public void goalway(){
			System.out.println("看来我真的是老了,不适合做程序员了,嗨!");
		}
	}
	
	public static void main(String[] args) {		
		StatePattern sp = new StatePattern();
		Programer p =sp.new Programer();		
		p.workHard();		
		p.raised();
		p.workHard();		
		p.raised();
		p.workHard();		
		p.raised();
		p.worklazy();
		p.fall();
		p.worklazy();
		p.fall();
		p.worklazy();
		p.fall();
		
		
		p.goalway();
	}

}

 运行结果:

 

我成程序员了,现在还只是Coder.
努力工作.....
我升职了,现在的职位是:项目组长
努力工作.....
我升职了,现在的职位是:项目经理
努力工作.....
我升职了,现在的职位是:项目总监
工作太累了,先玩会再说.....
悲剧了,我降职了,现在的职位是:项目经理
工作太累了,先玩会再说.....
悲剧了,我降职了,现在的职位是:项目组长
工作太累了,先玩会再说.....
悲剧了,我降职了,现在的职位是:Coder
看来我真的是老了,不适合做程序员了,嗨!
 

 

 

 

 

分享到:
评论

相关推荐

    设计模式编码实现

    本资源是一个Java版的设计模式编码实现,涵盖了全部二十三种经典设计模式,旨在帮助开发者更好地理解和应用这些模式。 首先,我们来逐一探讨这二十三种设计模式: 1. **单例模式**:确保一个类只有一个实例,并...

    stm32 f103定时器编码器模式

    在编码器模式下,定时器可以触发中断,程序在中断服务函数中处理编码器信号,更新电机状态。例如,可以更新位置寄存器、计算速度、处理错误或更新电机控制算法。 6. **应用示例** STM32 F103在伺服电机、步进电机...

    MSP432P401R RTOS 编码器电机PID 工程示例

    该示例项目展示了如何利用TI的驱动库函数来控制编码器电机,并实现定速和定角控制。这里我们将深入探讨其中的关键技术和知识点。 1. **MSP432P401R 微控制器** MSP432P401R是德州仪器(TI)的一款超低功耗混合信号...

    STM8单片机编码器使用示例

    总结来说,STM8单片机通过编码器接口配合TIM1定时器,可以实现对旋转设备的精确控制和状态监测。无论是查询方式还是中断方式,都能有效地获取编码器的脉冲信息,从而实现设备的精确控制。在编程实践中,理解STM8的...

    Java23个设计模式简单示例

    21. **状态模式**:允许一个对象在其内部状态改变时改变它的行为。State模式可以将对象的行为状态封装在独立的类中,使得对象可以在不同状态间自由切换。 22. **策略模式**:定义一系列的算法,并将每一个算法封装...

    23种设计模式示例代码

    19. **状态模式(State)**:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 20. **访问者模式(Visitor)**:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变元素的类...

    Hi3516板卡状态机示例

    【Hi3516板卡状态机示例】是一个针对基于Hi3516芯片的嵌入式系统设计的教程,旨在帮助开发者理解和实现状态机(Finite State Machine, FSM)的概念。状态机在嵌入式系统中广泛应用于处理各种序列化操作,如设备控制...

    应用示例-Java设计模式及应用案例(第2版)-[共11页].pdf

    这样,当对象状态变化时,行为也会随之改变,而无需在条件语句或复杂的if-else结构中硬编码这些行为。 在【例 13-1】计算机内存监控程序中,应用了状态模式来管理内存状态。程序通过监控内存的空闲率(free ratio)...

    STM32编码器模式库函数版

    STM32编码器模式库函数版是专为在STM32微控制器上处理编码器输入信号而设计的软件资源。编码器是一种传感器,通常用于测量旋转角度或速度,广泛应用于各种自动化设备,如机器人、无人机、电机控制以及平衡车等。STM...

    Java_在终极设计模式包中掌握经典设计模式和实际示例.zip

    状态模式(State Pattern)允许对象在内部状态改变时改变其行为,看起来好像对象改变了它的类。 最后,模板方法模式(Template Method Pattern)是一种行为型模式,定义了一个操作中的算法骨架,而将一些步骤延迟到...

    C#设计模式示例代码

    20. 状态模式(State):允许对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。C#中,通过状态对象和上下文对象实现状态切换。 21. 策略模式(Strategy):定义一系列的算法,并将每一个算法封装...

    设计模式应用场景介绍&基础示例

    19. **状态模式**:允许对象在其内部状态改变时改变其行为,对象看起来似乎修改了它的类。 20. **策略模式**:定义一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略使算法的变化独立于使用它的客户端...

    RC5编码格式的遥控器解码 PCA9633期间控制代码示例 串口通信程序示例

    具体到PCA9633的期间控制代码,这部分代码将涉及初始化I2C通信,配置PCA9633的工作模式,以及根据解码后的RC5指令更新LED的状态。例如,代码可能包含设置I2C地址、读写寄存器、设置亮度级别等操作。此外,对于串口...

    java设计模式 部分 代码示例

    这里提供的“java设计模式 部分 代码示例”压缩包文件包含了对多种Java设计模式的实现,通过实际代码来帮助理解这些模式的工作原理。 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局访问点。在...

    单片机多按键状态机的实现

    单片机多按键状态机的...在提供的"05-KEY"文件中,可能包含了一些示例代码或教程,用于指导实际的单片机多按键状态机实现。通过学习和实践这些材料,可以加深对这一主题的理解,并掌握在实际项目中应用该技术的能力。

    Y2设计模式示例上机.zip

    在这个“java-03”文件中,可能包含了上述各种设计模式的Java实现,比如: - 单例模式:确保一个类只有一个实例,并提供一个全局访问点。 - 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - ...

    23中設計模式示例代碼

    21. **状态模式(State)**:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎改变了它的类。 22. **策略模式(Strategy)**:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。让...

    C语言高效有限状态机(FSM)详细设计说明书.docx

    程序描述章节,会进一步介绍C语言实现的状态机的细节,如数据类型的定义(如枚举和结构体)、主要功能(如状态转换逻辑)、状态机的构建方法(如状态机图的映射),以及示例代码来展示实际操作流程。 在示例DEMO中...

    matlab卷积编码与viterbi译码的实现.docx

    ### MATLAB中的卷积编码与Viterbi译码实现详解 #### 一、卷积编码基础概念 卷积编码是一种常见的前向错误校正(FEC)技术,在数字通信系统中广泛应用于提高传输可靠性。其基本原理是将输入的信息比特序列经过编码器...

Global site tag (gtag.js) - Google Analytics