9.3 模版设计模式

发布时间 2023-06-09 14:52:24作者: 盘思动
  • 抽象类的设计应该是比类更高一层的设计。
  • 抽象类最大好处: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();										// 执行命令
	}
}
  • 这种设计模式,抽象类是个技术活!!