抽象类应用 —— 模版设计模式

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37199582/article/details/79279486

  现在假设有三类现实的事物(或者是更多的事物):

     Ø  机器人(Robot):具备充电、工作两个基本操作;

     Ø  人类(Human):具备吃饭、工作、睡觉三个基本操作;

     Ø  猪(Pig):具备吃饭、睡觉两个基本操作。


定义的一个行为类

abstract class Action {					// 定义一个抽象的行为类,行为不是具体的
	// 定义常量时必须保证两个内容相加的结果不是其它行为,例如:EAT + SLEEP的结果为6不会和其它值冲突
	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) {	// switch只支持数值判断,而if支持条件判断
		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();	// 定义子类的操作标准
}

定义描述机器人的行为子类

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 Robot());	// 传递机器人行为子类
		fun(new Human());	// 传递人类行为子类
		fun(new Pig());	// 传递猪的行为子类
	}
	/**
	 * 执行具体的操作行为,假设本处只执行EAT、SLEEP、WORK三个行为
	 * act 具体的行为对象
	 */
	public static void fun(Action act) {
		act.command(Action.EAT);		// 调用“吃”操作
		act.command(Action.SLEEP);		// 调用“睡”操作
		act.command(Action.WORK);		// 调用“工作”操作
	}
}


程序执行结果:

机器人补充能量!(机器人行为)

机器人正在努力工作!(机器人行为)

人类正在吃饭!(人类行为)

人类正在睡觉休息!(人类行为)

人为了梦想在努力工作!(人类行为)

猪正在啃食槽!(猪行为)

猪在睡觉养膘!(猪行为)






展开阅读全文

没有更多推荐了,返回首页