代理模式指为对象提供一种通过代理的方式来访问并控制该对象行为的方法。在客户端不适合或者不能够直接引用一个对象时,可以通过该对象的代理对象来实现对该对象的访问。
(1)定义原类
public interface Company{ void findWorker(String title); } public class HR implements Company{ private final static Log logger = LogFactory.getLog(this.getClass()); @Override public void findWorker(String title){ logger.info("i need find a worker,title is: "+title); } }
(2)定义Proxy
public class Proxy implements Company{ private final static Log logger = LogFactory.getLog(this.getClass()); private HR hr; public Proxy(){ super(); this.hr = new HR(); } @Override public void findWorker(String title){ hr.findWorker(title); // 通过猎头找候选人 String worker = getWorker(title); logger.info("find a worker by proxy,worker name is" + worker); } private String getWorker(String title){ Map<String,String> workerList = new HashMap<>(){ {put("java","张三");put("python","李四");put("Php","王五");} }; return workerList.get(title); } }
以上定义一个代理类Proxy,用来帮助企业寻找合适的候选人。其中Proxy继承了Company并持有HR对象,在其HR发出指令招人后,由代理完成具体的寻找候选人工作并将找到的候选人提供给公司。
(3)使用代理模式
public static void main(String[] args){ Company company = new Proxy(); company.findWorker("java"); }