1.首先有一个类定义模板
abstract class Action { //操作行为标记 public static final int EAT=1; public static final int SLEEP=3; public static final int WORK=5; public static final int RUN=7; public void order(int flag) { switch(flag) { //吃饭 case EAT: this.eat(); break; //睡觉 case SLEEP: this.sleep(); break; //工作 case WORK: this.work(); break; //跑步 case RUN: this.run(); break; //狗吃饭睡觉跑步 case EAT+SLEEP+RUN: this.eat(); this.sleep(); this.run(); break; //机器人吃饭工作 case EAT+WORK: this.eat(); this.work(); break; //人吃饭睡觉跑步工作 case EAT+SLEEP+RUN+WORK: this.eat(); this.sleep(); this.run(); this.work(); break; } } //动作行为 public abstract void eat(); public abstract void sleep(); public abstract void run(); public abstract void work(); }
这是个抽象类,有四个操作标识,一个命令处理方法 和四个抽像方法,命令处理方法根据操作符进行调用方法。
2.分别让狗,机器人,人继承模板类,分别实现他们独自的方法
class Dog extends Action{ @Override public void eat() { System.out.println("小狗在吃"); } @Override public void sleep() { System.out.println("小狗在睡觉"); } @Override public void run() { System.out.println("小狗在跑步"); } @Override public void work() { //小狗没有此行为 } }
class Robot extends Action{ @Override public void eat() { System.out.println("机器人加油"); } @Override public void sleep() { // TODO Auto-generated method stub } @Override public void run() { // TODO Auto-generated method stub } @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 run() { System.out.println("人在跑步"); } @Override public void work() { System.out.println("人在工作"); } }
3.设计主类
public class 模板设计模式{ public static void main(String[] args) { Action ac1=new Dog();//向上转,体现出抽象编程的好处 Action ac2=new Robot(); Action ac3=new Person();
//利用操作符进行方法调用 ac1.order(Action.EAT+Action.RUN+Action.SLEEP); ac2.order(Action.EAT+Action.WORK); ac3.order(Action.EAT+Action.RUN+Action.SLEEP); } }