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

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

常见结构如下:
你还不懂设计模式?- 委派设计模式_第1张图片
举个栗子,场景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()+":项目开发完成");
    }
}

这就创建了一个委派模式的简单实现,结构如下:
你还不懂设计模式?- 委派设计模式_第2张图片
来测试一下:

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源码中的实现。
你还不懂设计模式?- 委派设计模式_第3张图片

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

你可能感兴趣的:(设计模式,Spring5源码解读,设计模式)