Java设计模式菜鸟系列(十三)建模和实现状态模式
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859
状态模式(State):同意对象在内部状态改变时改变它的行为,对象看起来好像改动了它的类。状态模式说白了就是一个对象有不同的状态。不同的状态相应不同的行为。它事实上是对switch
case这种语句的拓展。
一、uml建模:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGh5X3ljdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
二、代码实现
/**
* 演示样例:状态模式-- 一个对像有不同的状 态,不同的状态相应不同的行为
*
* 以下四则运算为例
*/ 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);
} } /**
* client測试类
*
* @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));
}
}
三、总结
封装基类状态的行为,并将行为托付到当前状态。
版权声明:本文博主原创文章,博客,未经同意不得转载。
Java设计模式菜鸟系列(十三)建模和实现状态模式的更多相关文章
- Java设计模式菜鸟系列(两)建模与观察者模式的实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39755577 观察者(Observer)模式定义:在对象之间定义了一对多的依赖关系,这样一 ...
- Java设计模式菜鸟系列(二十二)中介者模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40027109 中介者模式(Mediator):主要用来减少类与类之间的耦合的,由于假设类与 ...
- Java设计模式菜鸟系列(一)策略模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39721563 今天開始咱们来谈谈Java设计模式. 这里会结合uml图形来解说,有对uml ...
- Java设计模式菜鸟系列(九)外观模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一 ...
- Java设计模式菜鸟系列(七)命令模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39804057 命令模式(Command):将"请求"(命令/口令)封装 ...
- Java设计模式菜鸟系列(十四)代理模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 代理模式(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些 ...
- Java设计模式菜鸟系列(十七)桥接模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711 桥接模式(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使 ...
- Java设计模式菜鸟系列(十)模板方法模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39806973 模板方法模式(Template Method):在一个方法中定义了一个算法的 ...
- Java设计模式菜鸟系列(十五)建造者模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39863125 建造者模式(Builder):工厂类模式提供的是创建单个类的模式.而建造者模 ...
随机推荐
- client对象层次和0级DOM
刚開始学了两天JS,闲着无聊,顺手画了张图
- android创建自定义对话框
创建如下自定义对话框: JAVA代码 LayoutInflater li = LayoutInflater.from(TagActivity. this); //NOTE final View Te ...
- bnu1066
hnu1066 给我们一张图,问我们摧毁边使得s和t不连通有多少种方案, 方案与方案之间不能存在相同的摧毁目标. 这是一个神奇的题目. 这题可以转为求s与t的最短路,为什么呢? 因为方案与方案之间不能 ...
- Mvc后台接收 参数
@Html.TextAreaFor(m => m.Emps, new { @class = "easyui-validatebox", @style = "heig ...
- 2014在辛星Javascript口译科
***************概要*************** 1.Javascript是一种原型化继承的基于对象的动态类型的脚本语言,它区分大写和小写.主要执行在client,用户即使响应用户的操 ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (五)
第四部分请点这里 本文将实现DrawBoard. 如前文所述,Obstacle类和Bing类仅仅提供给DrawBoard必要的信息,如何绘制则完全委托给了DrawBoard,也就是说游戏关键类的细节和 ...
- defgen工具
构造defgen档 由于 Oracle 和 SQL Server 中的数据类型不同.所以您必须建立数据类型转换.GoldenGate 提供了一个名为 DEFGEN 的专用工具.用于生成数据定义,当源表 ...
- NOI 评价体系 arbiter 安装方法 常见的问题 移植
#!/bin/bash AppPath="$PWD" 读取当前文件夹 echo "Arbiter is installing..." sudo apt-ge ...
- 《深入了解mybatis原则》 MyBatis架构设计和案例研究
MyBatis这是现在很流行ORM框架,这是非常强大.事实上现却比較简单.优雅. 本文主要讲述MyBatis的架构设计思路,而且讨论MyBatis的几个核心部件.然后结合一个select查询实例.深入 ...
- (转)linux service理解
能够使用service命令进行操作的,就是已经注册成为linux的系统服务了.window中也可以注册成为系统服务的办法. service命令用的次数真不少,就是比较多的关联点,用了很多次了,还是有些 ...