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}
    
    
  • 相关阅读:
    开源爬虫综述
    html页面工具-htmlUnit
    Html JavaScript网页制作与开发完全学习手册
    移动互联网之路-李晓斌
    算法图解
    游戏编程算法与技巧
    一秒解决CentOS下service 功能 不能使用 bash: service: command not found
    LINUX企业应用案例精解 第2版 李晨光
    深入分析GCC
    嵌入式LINUX基础教程 第2版
  • 原文地址:https://www.cnblogs.com/nick-huang/p/6173642.html
Copyright © 2011-2022 走看看