代理模式

举报
别团等shy哥发育 发表于 2023/10/01 22:47:55 2023/10/01
【摘要】 1、代理模式简介代理模式指为对象提供一种通过代理的方式来访问并控制该对象行为的方法。在客户端不适合或者不能够直接引用一个对象时,可以通过该对象的代理对象来实现对该对象的访问,可以将该代理对象理解为客户端和目标对象之间的中介者。在现实生活中也能看到代理模式的身影,比如企业会把五险一金业务交给第三方人力资源公司去做,因为人力资源公司对五险一金业务更加熟悉。在代理模式下有两种角色,一种是代理者,...

1、代理模式简介

代理模式指为对象提供一种通过代理的方式来访问并控制该对象行为的方法。在客户端不适合或者不能够直接引用一个对象时,可以通过该对象的代理对象来实现对该对象的访问,可以将该代理对象理解为客户端和目标对象之间的中介者。

在现实生活中也能看到代理模式的身影,比如企业会把五险一金业务交给第三方人力资源公司去做,因为人力资源公司对五险一金业务更加熟悉。

在代理模式下有两种角色,一种是代理者,一种是被代理者(Proxy),在被代理者需要做一项工作时,不用自己做,而是交给代理做。比如企业在招人时,不用自己去人才市场上找,可以通过代理(猎头公司)去找,代理有候选人池,可根据企业的需求筛选出合适的候选人返回给企业。

2、代理模式实现

(1)定义Company接口及其实现类HR:

public interface Company {
    void findWoker(String title);
}
public class HR implements Company {

    @Override
    public void findWoker(String title) {
        System.out.println("i neet find a worker,title is :"+title);
    }
}

以上代码定义了一个名为Company的接口,在该接口中定义了方法findWorker(),然后定义了其实现类HR,最后实现了findWorker()以负责公司的具体招聘工作。

(2)定义Proxy

import java.util.HashMap;
import java.util.Map;

public class Proxy implements Company {
    private HR hr;

    public Proxy() {
        super();
        this.hr=new HR();
    }

    //需要代理的方法
    @Override
    public void findWoker(String title) {
        hr.findWoker(title);
        //通过猎头找候选人
        String worker = getWorker(title);
        System.out.println("find a worker by proxy,worker name is :"+worker);
    }

    private String getWorker(String title){
        Map<String,String> workerList=new HashMap<String,String>(){
            {
                put("Java","张三");
                put("Python","李四");
                put("Php","王五");
            }
        };
        return workerList.get(title);
    }
}

以上代码定义了一个代理类Proxy,用于帮助企业寻找合适的候选人。其中Proxy继承了Company并持有HR对象,在其HR发出找人指令(findWorker)之后,由代理完成具体的寻找候选人工作并将找到的候选人提供给公司。

(3)使用代理模式

//使用代理模式
public static void main(String[] args) {
    Company company=new Proxy();
    company.findWoker("Java");
}

在使用代理模式时定义一个代理对象并调用其代理的方法即可,运行结果如下:

image-20230612122128419

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。