zoukankan      html  css  js  c++  java
  • 关于好多继承的问题,我们应该如何去理解

    我一直在思考一个问题但是一直没有想到答案,我想我有些明白了。

    public class SimpleWrapper implements Wrapper, Pipeline

     

    为什么SimpleWrapper要实现Wrapper和Pipeline这两个接口呢?首先我们要知道Wrapper和Pipeline这两个接口是做什么的?

     

    在整个流程中:

    A.Wrapper->SimpleWrapper->SimpleWrapper.pipeline.SimpleWrapperValve

    B.SimpleWrapper->allocate()->loadServlet()->getLoader(Wrapper.setLoader)

    C.Pipeline->SimplePipeline->getBasic()->setBasic()->getValves->removeVales

     

    我们将B的操作抽象出来就是Wrapper。

     

     

    我们将C的操作抽象出来就是Pipeline,其实现类就是SimplePipeline,我们用XXX方式引入: 

    private SimplePipeline pipeline = new SimplePipeline(this);

     

     

    在这个阶段中,我们主要实现的是Wrapper的功能,所以我们的实现类是SimpleWrapper,但是同时我们又要实现Pipeline的功能,所以就有了:

    public class SimpleWrapper implements Wrapper, Pipeline

     

    这样做我认为有如下几个优点:

    1.SimpleWrapper不会有遗漏方法(遗漏编译不通过),内部实现是:

    pipeline.getBasic();

    其实还是相当于直接对Pipeline进行操作。

    2.作为一个设计者我们没有必要让开发人员知道SimpleWrapper内部所有的方法(因为有很多的方法他们永远用不到),所以开发人员定义往往是这样的:

    Pipeline pipeline = new SimpleWrapper();

     

    到了下一个开发人员手里的时候又会是这样:

    Wrapper wrapper = new SimpleWrapper();

    但是这个时候我要用pipeline的方法呢?当然就是这样了:

    ((Pipeline)SimpleWrapper).xxxXXX();

    因为((Pipeline)SimpleWrapper).xxxXXX();实际调用的是

    SimpleWrapper.xxxXXX();它的内部实现是:pipeline.xxxXXX();

     

    小结:满足上述两点必须

    1.     implements Wrapper, Pipeline

    2.     Pipeline pipeline = new SimpleWrapper();

    这些也许就是抽象了,最笨的办法就是把SimpleWrapper直接抽象出一个接口,哈哈,这样就没有层次了。如果其他类要用pipeline的一个方法就必须把SimpleWrapper接口都拿过去。3. SimpleWrapperValve只有一个invoke方法,只要是为了调用service方法。

  • 相关阅读:
    poj 3071 Football (概率dp)
    CF1408G Clusterization Counting
    2-sat
    线段树优化建图
    SP5971 LCMSUM
    [NOI2020]命运
    SP19149 INS14H
    Atcoder ARC-068
    CF908G New Year and Original Order
    (四)、Fiddler打断点
  • 原文地址:https://www.cnblogs.com/baoguo/p/1329484.html
Copyright © 2011-2022 走看看