- 抽象类的设计应该是比类更高一层的设计。
- 抽象类最大好处:1.对子类方法对统一管理;2.可以自身提供有一些普通方法,并且这些普通方法可以调用抽象方法(这些抽象方法必须在有子类提供实现的时候才会生效)
abstract class Action { // 定义公共行为类
public static final int EAT = 1; // “吃饭”操作命令
public static final int SLEEP = 5; // “睡觉”操作命令
public static final int WORK = 10; // “工作”操作命令
public void command(int code) { // 执行命令
switch (code) { // 判断命令类型
case EAT: {
this.eat(); // 执行命令方法
break;
}
case SLEEP: {
this.sleep(); // 执行命令方法
break;
}
case WORK: {
this.work(); // 执行命令方法
break;
}
case EAT + SLEEP + WORK: { // 组合命令
this.eat(); // 执行命令方法
this.sleep(); // 执行命令方法
this.work(); // 执行命令方法
break;
}
}
}
public abstract void eat(); // 【抽象方法】吃饭行为
public abstract void sleep(); // 【抽象方法】睡觉行为
public abstract void work(); // 【抽象方法】工作行为
}
class Robot extends Action { // 定义机器人行为类
@Override
public void eat() { // 方法覆写
System.out.println("机器人需要接通电源充电。");
}
@Override
public void sleep() {} // 机器不需要休息,方法体为空
@Override
public void work() { // 方法覆写
System.out.println("机器人按照固定的套路进行工作。");
}
}
class Person extends Action { // 人类行为
@Override
public void eat() { // 方法覆写
System.out.println("饿的时候安静的坐下吃饭。");
}
@Override
public void sleep() { // 方法覆写
System.out.println("安静的躺下,慢慢的睡着,而后做着美梦。");
}
@Override
public void work() { // 方法覆写
System.out.println("人类是高级脑类动物,在工作中不断学习与成长。");
}
}
class Pig extends Action { // 猪类行为
@Override
public void eat() { // 方法覆写
System.out.println("吃食槽中饲料。");
}
@Override
public void sleep() { // 方法覆写
System.out.println("倒地就睡。");
}
@Override
public void work() {} // 猪不需要工作,方法体为空
}
public class HelloWorld {
public static void main(String args[]) {
Action robotAction = new Robot(); // 机器人行为
Action personAction = new Person(); // 人类行为
Action pigAction = new Pig(); // 猪类行为
System.out.println("------------ 机器人行为 -------------");
robotAction.command(Action.SLEEP); // 执行命令---ACTION.SLEEP类中常量访问方法!!!!
robotAction.command(Action.WORK); // 【无效操作】执行命令
System.out.println("------------ 人类的行为 -------------");
personAction.command(Action.SLEEP + Action.EAT + Action.WORK); // 执行命令
System.out.println("------------ 猪类的行为 -------------");
pigAction.work(); // 执行命令
pigAction.eat(); // 执行命令
}
}
- 这种设计模式,抽象类是个技术活!!