zoukankan      html  css  js  c++  java
  • 【Java】模板方法模式

    今天介绍的是模板方法模式~

    模板方法模式,由父类定制总体的框架,具体的细节由子类实现。

    一般来说,模板方法中有3类方法:

    • 抽象方法,父类声明方法待子类具体实现。比如例子的validate、save、update方法。
    • 模板方法,编写总体的框架,调用其他方法实现业务,一般无须被子类重写。比如例子的saveOrUpdate方法。
    • 钩子方法,父类本身带有默认实现,子类可按照需要重写。比如例子的log4Operation方法。

    父类:

    import java.util.Map;
    
    
    public abstract class AbstractBusinessService {
    	
    	/**
    	 * 保存业务(模板方法)
    	 * @param map 数据
    	 * @return 操作记录数
    	 */
    	public final int saveOrUpdate(Map<String, Object> map) {
    		String result = this.validate(map);
    		if (result != null) {
    			throw new RuntimeException(result);
    		}
    		
    		int num;
    		if (map.get("id") == null) {
    			num = this.save(map);
    		} else {
    			num = this.update(map);
    		}
    		
    		this.log4Operation(map);
    		
    		return num;
    	}
    	
    	/**
    	 * 校验(抽象方法)
    	 */
    	public abstract String validate(Map<String, Object> map);
    	
    	/**
    	 * 更新(抽象方法)
    	 */
    	public abstract int update(Map<String, Object> map);
    	
    	/**
    	 * 保存(抽象方法)
    	 */
    	public abstract int save(Map<String, Object> map);
    	
    	/**
    	 * 写操作日志(钩子方法)
    	 */
    	public void log4Operation(Map<String, Object> map) {
    		System.out.println("write business.log : " + map);
    	}
    	
    }
    
    

    A子类:

    import java.util.Map;
    
    
    public class UserService extends AbstractBusinessService {
    
    	@Override
    	public String validate(Map<String, Object> map) {
    		System.out.println("User validateion.");
    		return null;
    	}
    
    	@Override
    	public int update(Map<String, Object> map) {
    		System.out.println("Update user.");
    		return 0;
    	}
    
    	@Override
    	public int save(Map<String, Object> map) {
    		System.out.println("Insert user.");
    		return 0;
    	}
    
    }
    

    B子类:

    import java.util.Map;
    
    
    public class RoleService extends AbstractBusinessService {
    
    	@Override
    	public String validate(Map<String, Object> map) {
    		System.out.println("Role validateion.");
    		return null;
    	}
    
    	@Override
    	public int update(Map<String, Object> map) {
    		System.out.println("Update role.");
    		return 0;
    	}
    
    	@Override
    	public int save(Map<String, Object> map) {
    		System.out.println("Insert role.");
    		return 0;
    	}
    	
    	@Override
    	public void log4Operation(Map<String, Object> map) {
    		System.out.println("write t_business_log : " + map);
    	}
    
    }
    
    

    调用入口:

    import java.util.HashMap;
    import java.util.Map;
    
    
    public class HowToUse {
    
    	public static void main(String[] args) {
    		AbstractBusinessService userServcie = new UserService();
    		Map<String, Object> userMap = new HashMap<String, Object>();
    		userMap.put("id", 1);
    		userMap.put("name", "nick huang");
    		userServcie.saveOrUpdate(userMap);
    		
    		System.out.println();
    		
    		AbstractBusinessService roleServcie = new RoleService();
    		Map<String, Object> roleMap = new HashMap<String, Object>();
    		roleMap.put("role", "admin");
    		roleServcie.saveOrUpdate(roleMap);
    	}
    
    }
    
    

    日志:

    User validateion.
    Update user.
    write business.log : {id=1, name=nick huang}
    
    Role validateion.
    Insert role.
    write t_business_log : {role=admin}
    
    
  • 相关阅读:
    Django(一)创建第一个Django的demo
    使用webdriver扒取网站小说(二)-----进阶篇(分层数据驱动)
    【求解答】在eclipse中运行Android项目出现的问题 ——Launching MyFirstAPP' has encountered a program. Errors occurred during the build.
    今天想写一点简单的东西-关于计算机算法的
    新的朋友
    Java基础回顾(3)
    java基础回顾(2)
    java基础回顾(一)
    Asp.Net Mvc AutoFac 的简单使用
    微信文件记录删除
  • 原文地址:https://www.cnblogs.com/nick-huang/p/6173642.html
Copyright © 2011-2022 走看看