• Java模版方法的另一种实现


      面试荔枝FM杯具,遂死磕AQS途中发现一个有趣的模版用法,记下来。

      模版方法是很重要的设计模式,在数据访问层、众多的插件接口都可见其影子,一般的实现都是在模版中定义抽象方法并使用其方法进行算法,让具体的模版定义定制的功能,类似:

    public abstract class Template {
        public abstract A productA();
        private void strategy(){
        //......
        A a = productA();
        //......
        }
    }

      然而有时候你可能没办法让productA() 称为抽象方法,比喻你需要把该方法用在构造器模式中,也就是在静态内部类模式中时;

      然而有时候你的模版可能有多个抽象方法,但不要求子类实现所有抽象方法,只需要实现个别就好了(参考AQS同步器的acquire()和acquireShare()就不需要全部实现)

      这个时候也要实现模版方法怎么办呢?

      下面介绍一种好方法,就是用异常,上代码

    public class Template {
        public A productA(){
             throw new UnsupportedOperationException();    
        }
        public B productB(){
            throw new UnsupportedOperationException();    
        }
    
        private void strategy(){
        //......
        A a = productA();
        //......
        }
    }

      这样子类如果调用相关方法就会抛出check异常了,如果一个子类的职责需要用到productA,那么编译器就会要求A生产方法必须要被重写或者处理异常。是不是非常完美?

  • 相关阅读:
    Socket编程模式
    Asp.Net Core
    TensorFlow文本与序列的深度模型
    Net
    XSS分析及预防(转)
    MyCAT部署及实现读写分离(转)
    如何搭建NTP服务(转)
    如何搭建DNS服务(转)
    如何高效地向Redis插入大量的数据(转)
    Android 通过广播启动另一个应用的Activity
  • 原文地址:https://www.cnblogs.com/iCanhua/p/8965550.html
Copyright © 2020-2023  润新知