方法屏蔽之传统方式

设计模式 同时被 2 个专栏收录
3 篇文章 0 订阅
87 篇文章 1 订阅
/**
 * 传统方式隐藏类中的method
 */
public class MethodHide {

    // 这个接口职责不分明
    interface Management {
        void read();

        void write();

        String state();

        void stop();
    }
    
    // ====================拆分成下面两个接口

    // 操作
    interface Opt {
        void read();

        void write();
    }
    // 控制
    interface Ctl {
        String state();

        void stop();
    }

    // 实现上面两个接口
    static class Impl implements Opt, Ctl {

        @Override
        public void read() {

        }

        @Override
        public void write() {

        }

        @Override
        public String state() {
            return null;
        }

        @Override
        public void stop() {

        }
    }

    static class Readable {
        private final Opt opt;

        Readable(Opt opt) {
            this.opt = opt;
        }

        // 通过Opt接口,相当于把另外两个方法屏蔽了
        // 只能看到read/write方法
        // 这样职责清晰了
        public void delegateRead() {
            opt.read();
        }
    }

    public static void main(String[] args) {
        Impl management = new Impl();
        new Readable(management);
    }

}

或者采用包装类,比如

Executors.newSingleThreadExecutor()

的源码

public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>()));
}

就是使用了 FinalizableDelegatedExecutorService包装类,其目的是:

是一个包装类,仅仅只暴露 ExecutorService 的一个实现类的方法.
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值