Java设计模式菜鸟系列(十三)状态模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859

状态模式(State):允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。状态模式说白了就是一个对像有不同的状态,不同的状态对应不同的行为,它其实是对switch case这样的语句的拓展。

一、uml建模:

二、代码实现

/**
 * 示例:状态模式-- 一个对像有不同的状 态,不同的状态对应不同的行为
 *
 * 下面四则运算为例
 */

interface State {
	public double operate(double num1, double num2);
}

/**
 * 加法
 */
class AddOperator implements State {

	@Override
	public double operate(double num1, double num2) {
		return num1 + num2;
	}
}

/**
 * 减法
 */
class SubOperator implements State {

	@Override
	public double operate(double num1, double num2) {
		return num1 - num2;
	}
}

/**
 * 学生
 */
class Student {
	private State state;

	public Student(State state) {
		this.state = state;
	}

	/**
	 * 设置状态
	 */
	public void setState(State state) {
		this.state = state;
	}

	public double operate(double num1, double num2) {
		return state.operate(num1, num2);
	}

}

/**
 * 客户端测试类
 *
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		Student s1 = new Student(new AddOperator());
		System.out.println(s1.operate(12, 23));
		/**
		 * 改变状态,即改变了行为 --> 加法运算变成了减法运算
		 */
		s1.setState(new SubOperator());
		System.out.println(s1.operate(12, 23));
	}
}

三、总结

封装基类状态的行为,并将行为委托到当前状态。

时间: 2024-12-18 00:39:28

Java设计模式菜鸟系列(十三)状态模式建模与实现的相关文章

Java设计模式菜鸟系列(一)策略模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39721563 今天开始咱们来谈谈Java设计模式.这里会结合uml图形来讲解,有对uml建模不熟的可以参考我的另一篇博文uml建模. 首先,个人觉得模式的设计就是一个将变化的东西和不变(稳定)的东西分离的过程.咱们的应用中可能有很多需要改变的地方,而模式要做的就是把它们"抽取"出来并进行"封装"和"实现",因此更多的时候咱们是面向接口编程

Java设计模式菜鸟系列(九)外观模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一样,可以将类与类之间的关系配置到配置文件中,而外观模式就是将他们的 关系放在一个Facade类中,降低了类与类之间的耦合度,该模式中没有涉及到接口. 一.uml建模: 二.代码实现: /** * 示例:外观模式,也称门面模式 * * 优点:为了解决类与类之间的依赖关系,降低了类与类之间的耦合度 *

Java设计模式菜鸟系列(十)模板方法模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39806973 模板方法模式(Template Method):在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以再不改变算法结构的情况下,重新定义算法中的某些步骤.简而言之:模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现. 一.uml建模: 二.代码实现: /** * 示例:模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现.

Java设计模式菜鸟系列(十七)桥接模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711 桥接模式(Bridge): 把事物和其具体实现分开(抽象化与实现化解耦),使他们可以各自独立的变化.假设你的电脑是双系统(WinXP.Win7),而且都安装了mysql.oracle.sqlserver.DB2这4种数据库,那么你有2*4种选择去连接数据库.按平常的写法,咱要写2*4个类,但是使用了桥接模式,你只需写2+4个类,可以看出桥接模式其实就是一种将N*M转化成N+

Java设计模式菜鸟系列(七)命令模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39804057 命令模式(Command):将"请求"(命令/口令)封装成一个对象,以便使用不同的请求.队列或者日志来参数化其对象.命令模式也支持撤销操作.命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开. 一.uml建模 二.代码实现: /** * 示例:以咱去餐馆吃饭为例,分为3步 * * 1.和小二说,来个宫保鸡丁 --> 顾客发出口令 * *

Java设计模式菜鸟系列(十一)迭代器模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39807741 迭代器模式(Iterator):提供了一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 一.uml建模: 二.代码实现 /** * 示例:迭代器模式 * */ interface Iterator { /** 前移 */ public Object previous(); /** 后移 */ public Object next(); /** 判断是否有下

Java设计模式菜鸟系列总结及博客全目录

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40031567 今天来对这23种设计模式做个总结.咱使用设计模式的目的是为了可重用代码.让代码更容易被他人理解.保证代码可靠性,当然设计模式并不是万能的,项目中的实际问题还有具体分析.咱不能为了使用设计模式而使用,而是在分析问题的过程中,想到使用某种设计模式能达到咱需要的效果,而且比不使用设计模式更有优势,那么咱该考虑使用设计模式了. 一.设计模式的一般分类 创建型(Creator)模式(

JAVA设计模式十二--State(状态模式)

状态模式(State Pattern)是设计模式的一种,属于行为模式. 定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化.意图:允许一个对象在其内部状态改变时改变它的行为适用场景: 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为. 2.一个操作中含有庞大的多分支结

Java设计模式菜鸟系列(二十三)访问者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40028509 访问者模式(Visitor):把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化.访问者模式适用于数据结构相对稳定而算法又容易变化的系统.访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者:而它的缺点就是增加新的数据结构很困难. 一.uml建模: 二.代码实现 /** * 访问者模式(Visitor):把数据结构和作用于结构上的操作解耦合,使