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

      

  • 相关阅读:
    RTTI机制
    constexpr
    map/unordered_map
    Centos 安装Oracle
    JS带进度 文件 重复 自动 异步上传
    xadmin 小组件默认折叠
    xadmin datetime 类型报错 unsupported format characte
    Vmware 链接克隆 转 完整克隆 Converting a linked clone virtual machine to a full clone virtual machine
    vsftpd 530 500 553
    百度自然语言处理API调用
  • 原文地址:https://www.cnblogs.com/cainame/p/10325830.html
Copyright © 2011-2022 走看看