一、问题描述
假设有以下三个类:
机器人:具备充电、工作两个基本操作;
人类:具备吃饭、工作、睡觉三个基本操作;
猪:具备吃饭、睡觉两个基本操作。
现在要求实现对以上事物的控制。
二、解决方案
定义一个行为抽象类Action:
abstract class Action {
//将所有的操作行为命令定义为常量
public static final int EAT = 1;
public static final int SLEEP = 5;
public static final int WORK = 7;
//控制操作行为
public void command(int flag){
switch(flag) {
case EAT:
this.eat();
break;
case SLEEP:
this.sleep();
break;
case WORK:
this.work();
break;
case EAT + WORK:
this.eat();
this.work();
break;
}
}
//需要子类实现的方法
public abstract void eat();
public abstract void sleep();
public abstract void work();
}
分别定义三个子类Robot、Human、Pig类,继承抽象类Action
class Robot extends Action {
public void eat(){
System.out.println("机器人充电!");
}
public void sleep(){//此方法不需要,但必须覆写,方法体为空
}
public void work(){
System.out.println("机器人在工作!");
}
}
class Human extends Action {
public void eat(){
System.out.println("人类正在吃饭!");
}
public void sleep(){//此方法不需要,但必须覆写,方法体为空
System.out.println("人类正在休息!");
}
public void work(){
System.out.println("人类在工作!");
}
}
class Pig extends Action{
public void eat(){
System.out.println("猪正在进食!");
}
public void sleep(){
System.out.println("猪正在睡觉养膘!");
}
public void work(){
}
}
编写测试类
public class TestDemo {
public static void main(String args[]) {
fun(new Human());
fun(new Robot());
fun(new Pig());
}
public static void fun(Action act){
act.command(Action.EAT);
act.command(Action.SLEEP);
act.command(Action.WORK);
}
}
程序执行结果
最后
之后学习到Servlet开发部分的时候会见到模板设计模式。所有的Servlet一定要继承HttpServlet类,HttpServlet类根据用户发出的不同请求(每一种请求都通过一个常量表示)调用不同的方式进行处理。例如:发出的是get请求,就调用doGet()方法,发出的是post请求,就调用doPost()方法。
参考书籍
《第一行代码Java》抽象类
各位晚安,我回去了。