美文网首页设计模式互联网科技Java成长之路
设计模式之备受青睐的委派模式

设计模式之备受青睐的委派模式

作者: 爪哇部落格 | 来源:发表于2019-07-28 23:22 被阅读2次

    场景简介


    王大哥的女儿,装饰者模式中提到的那个肤白貌美的程序媛;通过几年的努力成为了一个项目组长,日常的工作由原来的基础开发,转变为工作的分配以及进度的管理,那么她是如何开展工作的呢?

    委派模式


    委派模式在于指定具体的类,同时保护被指定的类,向调用方屏蔽内部调用细节;正如在我们的日常工作量,一个英明的领导通常只会向项目管理者询问项目的进度以,而不关注哪个功能是由哪个程序员完成的;通常委托模式有如下特性:

    • 供调用方使用,并向其屏蔽内部实现细节
    • 具体功能有被委托者实现
    • 有委托者进行被委托者的选择和调度

    代码演示


    首先,实现我们定义一个Worker员工接口

    public interface Worker {
    
        /**
         * 执行工作
         */
        void doWork();
    }
    

    其次,我们实现一个具体任务执行的员工OriginalWorker

    public class OriginalWorker implements Worker {
    
        @Override
        public void doWork() {
            System.out.println("I am working very hard");
        }
    }
    

    然后,我们实现一个任务委派者DelegateWorker

    public class DelegateWorker implements Worker {
    
        private Worker worker;
    
        public DelegateWorker(Worker worker) {
            this.worker = worker;
        }
    
        @Override
        public void doWork() {
            System.out.print("Hi Boss,");
            worker.doWork();
        }
    }
    

    写一个简单的Demo,来演示整个过程:

    public class BossDemo {
    
        public static void main(String[] args) {
            Worker delegate = new DelegateWorker(new OriginalWorker());
            delegate.doWork();
        }
    }
    

    演示效果:

    Hi Boss,I am working very hard
    

    总结


    以上示例部分读者可能感觉到有些暗讽的味道,但是请谨记技术无罪,有罪的是人;嘻嘻,我们回到重点,委派模式在Spring 和 MyBatis 源码中都有其影子,例如:MyBatis 在实现二级缓存CachingExecutor时,就是利用了委派模式,感兴趣的读者可以取研究一下,或者移步本人的这可能是简书最白话的MyBatis源码解读;简单的类图结构如下:

    图片由Idea生成

    相关文章

      网友评论

        本文标题:设计模式之备受青睐的委派模式

        本文链接:https://www.haomeiwen.com/subject/jvemrctx.html