zoukankan      html  css  js  c++  java
  • 模板设计模式

    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); } }

      

  • 相关阅读:
    浅析MySQL关联left join 条件on与where的区别
    c语言 char * char** 指针 * 和**
    MVC实用构架实战(一)——项目结构搭建
    实现存储过程自动执行jobs
    Oracle 建立索引及SQL优化
    vue vhtml table里内容不换行 带省略号
    canvas lineTo 理解
    canvas quadraticCurveTo 二次贝塞尔曲线
    canvas arc 画园
    Java对象内存模型
  • 原文地址:https://www.cnblogs.com/cainame/p/10325830.html
Copyright © 2011-2022 走看看