你还不懂设计模式?- 委派设计模式

委派设计模式(Delegate Pattern)是Java中使用的比较多的一种设计模式。意思就是将一组实现了相同接口的类委派给另一个子类(这个类是委派类,不需要实现具体的业务逻辑)来管理。常用与管理接口的多个实现类。控制调用的逻辑。

常见结构如下:
在这里插入图片描述
举个栗子,场景1:例如在一个科技公司,各个员工协同做项目开发。

分析: 这个场景里面统一的接口是员工。 各个员工是不同的实现类。项目经理是委托类(也是员工)。项目委托给项目经理后, 他负责协调其他员工来进行项目开发。

① 创建统一接口 Staff

public interface Staff {
    /**
     * 工作接口
     */
    void work();
}

② 创建具体业务的实现Java开发程序员和前端VUE开发程序员

public class JavaProgrammer implements Staff {
    @Override
    public void work() {
        System.out.println(JavaProgrammer.class.getName()+"-Java程序员正在写代码");
    }
}
public class VueProgrammer implements Staff {
    @Override
    public void work() {
        System.out.println(VueProgrammer.class.getName()+"-Vue程序员正在画前端界面");
    }
}

③ 创建委派类,项目经理ProjectManager

public class ProjectManager implements Staff {
    private List<Staff> list ;

    public ProjectManager() {
        this.list = new ArrayList<>(2);
        list.add(new JavaProgrammer());
        list.add(new VueProgrammer());
    }

    @Override
    public void work() {
        System.out.println(ProjectManager.class.getName()+":项目经理开始安排工作");
        if (null != list &&list.size()>0){
            list.forEach(Staff::work);
        }
        System.out.println(ProjectManager.class.getName()+":项目开发完成");
    }
}

这就创建了一个委派模式的简单实现,结构如下:
在这里插入图片描述
来测试一下:

Staff manager = new ProjectManager();
manager.work();

输出结果:
com.dong.designs.delegate.ProjectManager:项目经理开始安排工作
com.dong.designs.delegate.JavaProgrammer-Java程序员正在写代码
com.dong.designs.delegate.VueProgrammer-Vue程序员正在画前端界面
com.dong.designs.delegate.ProjectManager:项目开发完成

下面来看一下在spring源码中的实现。
在这里插入图片描述

这里涉及到了三个角色:
① 统一接口EntityResolver
② 两个具体的业务实现类BeansDtdResolver和PluggableSchemaResolver
③ 委派类DelegatingEntityResolver,它也实现了统一的接口EntityResolver,然后它包含另外两个包含具体业务逻辑的子类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值