`

状态模式之编码实现示例

阅读更多

源码:

 

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)的一款超低功耗混合信号...

    【Head First 设计模式】以C++代码的方式写出各种模式实现示例.zip

    《Head First 设计模式》是一本深受程序员欢迎的书籍,它通过生动有趣的方式介绍了各种设计模式,并且本书还特别提供了以C++语言实现的代码示例,这使得学习者能够更直观地理解设计模式的应用。 本书涵盖的设计模式...

    STM8单片机编码器使用示例

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

    Java23个设计模式简单示例

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

    23种设计模式示例代码

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

    通过Java实现一个经典的单例模式示例代码.zip

    通过阅读文档中的代码示例和解释,开发者能够更好地理解单例模式的应用场景和实现细节,从而提高自己在软件设计和编码实践中的能力。不仅如此,了解单例模式的实现原理也是开发者进阶到系统架构设计必须具备的知识点...

    Hi3516板卡状态机示例

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

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

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

    STM32编码器模式库函数版

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

    设计模式-java实现.zip

    行为型模式包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。在Java中,行为型模式通常依赖于接口和抽象类来实现。 在...

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

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

    C#设计模式示例代码

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

    Java设计模式示例(24全)详尽笔记与代码示例.zip

    行为型模式中包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。责任链模式通过建立一条链来处理请求,请求沿着链传递,直到...

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

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

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

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

    java设计模式 部分 代码示例

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

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

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

Global site tag (gtag.js) - Google Analytics