package templateMethod;/** * 模板方法: 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 * 我的理解就是好多东西都定义到父类(但是不做具体的实现 而是抽象或者实现类中简单实现) 子类中根据需求进行具体的实现 *  * 优点: ☆ 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。 *  ☆ 子类实现算法的某些细节,有助于算法的扩展。 *  ☆ 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。 *  缺点: *   △ 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。 *  适用场景: *   □ 在某些类的算法中,用了相同的方法,造成代码的重复。 *   □ 控制子类扩展,子类必须遵守算法规则。 *  * 模板方法模式的结构: 抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现 *  * 模版方法:由抽象类声明并加以实现。一般来说,模版方法调用抽象方法来完成主要的逻辑功能, * 并且,模版方法大多会定义为final类型,指明主要的逻辑功能在子类中不能被重写。 *  * 钩子方法:由抽象类声明并加以实现。但是子类可以去扩展,子类可以通过扩展钩子方法来影响模版方法的逻辑。 * 抽象类的任务是--》搭建逻辑的框架,通常由经验丰富的人员编写,因为抽象类的好坏直接决定了程序是否稳定性 *  *  * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月14日 下午3:09:13 */public class TemplateMethod {public static void main(String[] args) { Son son = new Son(); son.templateMethod();}}abstract class Father {/* * 抽象方法 */abstract void abstractMethod();/* * 模版方法 */final void templateMethod(){System.out.println("本方法不能被子类重写!!!!");System.out.println("------调用钩子方法hookMethod开始");hookMethod();System.out.println("------调用钩子方法hookMethod结束");System.out.println("------调用抽象方法开始");abstractMethod();System.out.println("------调用抽象方法结束");//返回布尔类型的钩子方法if(isPermit()){System.out.println("isPermit这类方法就是用来控制逻辑的 子类如果不想走这条分支 完全可以覆盖isPermit 返回false  像svn设置权限的钩子文件可能用的就是这个模式");}}/* * 钩子方法 子类实现 */public void hookMethod() {System.out.println("父类钩子方法的实现");}/* * 钩子方法 2  * 这类钩子方法很实用  * 用于对某个条件进行判断,如果条件满足则执行某一步骤 看我在templateMethod中怎么使用 */public boolean isPermit() {return true;}}class Son extends Father{/** 钩子方法 子类实现*/public void hookMethod() {System.out.println("子类钩子方法的实现");}/* * 实现抽象方法 */void abstractMethod() {System.out.println("子类实现抽象方法");}/* * 如果不想执行if(isPermit) 这个分支 可以覆盖这个方法 返回false */public boolean isPermit() {return false;}}


©著作权归作者所有:来自51CTO博客作者木子的昼夜的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 5.依赖倒转原则
  2. 8.工厂方法
  3. 【收藏】最全JavaScript中所有的内置对象属性和方法汇总整理
  4. 微信小程序或公众号以及特殊表情,昵称等存入MySQL报错问题
  5. bootstrap-treeview 扩展addNode方法 动态添加子节点的方法
  6. DBeaver、Navicat、MySQL高频报错及解决方法
  7. JavaScript:留言板添加字数实时统计与禁止超出功能,部分字符串和
  8. 用jQuery的attr()设置option默认选中无效的解决 attr设置属性失
  9. 【JS基础入门】JavaScript原生Ajax请求与响应处理方式及JSON数据

随机推荐

  1. PHP 排序算法原理及总结
  2. PHP生成唯一ID
  3. PHP使用QueryList轻松实现一个百度网盘资
  4. PHP面向对象中new self( )和 new static(
  5. php启动内置服务器
  6. PHP下载远程文件到指定目录
  7. Centos下PHP5升级PHP7
  8. PHP发送邮件:如何自定义reply-to头部以及
  9. mac切换PHP版本并使当前PHP版本生效
  10. PHP_CodeSniffer安装和使用教程(自动代码