假设state是从数据库中提取出的值
...
if(1==state){
System.out.println("上班");
}else if(2==state){
System.out.println("下班");
}else if(3==state){
System.out.println("加班");
}else{
System.out.println("没班");
}
...
...
if(1==state){
System.out.println("上班");
}else if(2==state){
System.out.println("下班");
}else if(3==state){
System.out.println("加班");
}else{
System.out.println("没班");
}
...
解决方案 »
- 连接SQL server 2005 sql=con.createStatement() 无法执行该语句
- Swing中使用什么组件/技术 可以给TextField增加类似google/百度 输入栏下的提示框
- 雪天,荆棘丛中,跪求,帮帮忙。
- 一元钱化整为零,如何化法?有多少种化法?
- 如何让java程序在读取文件数据的同时,做别的事情?
- 求助高手 关于JAVA SWING的对话框跨平台的问题
- 使用applet进行Udp通信的问题?
- 高分请教一个基础问题!
- 关于Swing的问题,请高手进来!!!
- 关于foreach遍历数组时,无法赋值的问题
- 这段代码为什么运行到最后报空指针啊
- foreach语句......不懂
showWorkStatus(WorkStatus.ON);
showWorkStatus(2);
}
public static void showWorkStatus(WorkStatus status) {
System.out.println(status.getStatusDesc());
}
public static void showWorkStatus(int n) {
WorkStatus[] status = WorkStatus.values();
for(int i = 0; i < status.length; i++) {
if(n == status[i].getStatus()) {
System.out.println(status[i].getStatusDesc());
return;
}
}
System.out.println(WorkStatus.OTHER.getStatusDesc());
}
}enum WorkStatus {
OTHER(0, "没班"),
ON(1, "上班"),
OFF(2, "下班"),
OVERTIME(3, "加班");
private int status;
private String statusDesc;
WorkStatus(int status, String statusDesc) {
this.status = status;
this.statusDesc = statusDesc;
} public int getStatus() {
return status;
} public String getStatusDesc() {
return statusDesc;
}
}
showWorkStatus(WorkStatus2.ON);
}
}class WorkStatus2 { private int status;
private String statusDesc;
private WorkStatus2(int status, String statusDesc) {
setStatus(status);
setStatusDesc(statusDesc);
}
public final static WorkStatus2 ON = new WorkStatus2(1, "上班");
public final static WorkStatus2 OFF = new WorkStatus2(2, "下班");
public final static WorkStatus2 OVERTIME = new WorkStatus2(3, "加班");
public final static WorkStatus2 OTHER = new WorkStatus2(0, "没班"); public int getStatus() {
return status;
}
public String getStatusDesc() {
return statusDesc;
}
private void setStatus(int status) {
this.status = status;
}
private void setStatusDesc(String statusDesc) {
this.statusDesc = statusDesc;
}
}
System.out.println(status.getStatusDesc());
}
类型安全枚举形式,因为这样可以把一些毫无意义的东西统一进行管理。在方法体内尽量不要出来数字量和字符串量,都应使用上面提到的三种方式中的一种。比如:状态 1 时可以写为 WorkStatus.ON 或者是 WORK_STATUS_ON 这种。
(也就是OCP原则啦)
swithc(state){
case : .......
}
}这样你就可以复用这个方法,并且以后你要是想改变当state=1时的输出的话,你只需改output一处就ok了。ooad 和 设计模式 我是还不能很懂,但我觉得Java现在主要做的应用,所以追求的是复用 和 松耦合。比如你把output()方法的形参用一个类型来封装,如output(A a),这样有一天你要想改变output的行为,你只需改A类,而应用中调ouput(a)的地方都不用修改。其实我觉得这也是松耦合,提高复用的。明白你的意思,其实“小代码”思考好了,也可以发现问题,我们是学习吗。不见得真的要一个巨大项目背景才能谈设计模式。
public interface Status{
public void printStatus();
}public class WorkStatus implement Status{
public void printStatus(){
System.out.println("工作“);
}
}//各个状态的类.....public class FreeStatus implement Status{
public void printStatus(){
System.out.println("没班“);
}
}public classc StatusFactory{
public static Status getStatus(int i){
switch(i){
case 1:
return new WorkStatus();
//添加更多。
case 4:
return new FreeStatus ();
}
}
}public class TestStatus{
private Status s ;
TestStatus(int i){
s = StatusFactory.getStatus(i);
} public print( ){
s.printStatus();
} public static void main(String[] args){
TestStatus test = new TestStatus();
test.print();
}
}这个例子中包含了几个简单的设计模式 你可以领悟一下。其实楼上说的都很好。学习可以。少量代码中用这种东西得不偿失的。:)
问题虽然小,但是也可以用设计模式来指导一下。状态模式简介:抽象状态(State)角色:
定义一个抽象接口,用以封装环境(Context)对象的一个特定的状态所对应的行为。
具体状态(ConcreteState)角色:
每一个具体状态类都实现了环境(Context)对象的一个状态所对应的行为。
环境(Context)角色:
定义客户端感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象当前的状态。