代理分为两类: 静态代理和动态代理。
下一栏写动态代理!
-
静态代理
一个代理只能代理一个服务。 -
实例代码说明
① 创建两个服务IMassage和IWashpublic interface IMassage { void massage(); } public interface IWash { void wash(); }
② 创建一个代理类
public class Agent implements IMassage { private IMassage iMassage; public Agent(IMassage iMassage) { this.iMassage = iMassage; } @Override public void massage() { iMassage.massage(); } } public class WashAgent implements IWash , IMassage { IWash iWash; IMassage iMassage; public WashAgent(IWash iWash) { this.iWash = iWash; } public WashAgent(IMassage iMassage) { this.iMassage = iMassage; } public WashAgent(IWash iWash, IMassage iMassage) { this.iWash = iWash; this.iMassage = iMassage; } @Override public void wash() { iWash.wash(); } @Override public void massage() { iMassage.massage(); } }
③ 创建两个服务人员的实体类
public class Lucy implements IMassage { @Override public void massage() { System.out.println("Lucy 为您提供按摩服务"); } } public class Tom implements IWash, IMassage { @Override public void wash() { System.out.println("Tom 为您提供洗脚服务"); } @Override public void massage() { System.out.println("Tom 为您提供按摩服务"); } }
-
创建一个执行代码的实体类
public class MyClass { public static void main(String[] args) { IMassage iMassage = new Lucy(); Agent agent = new Agent(iMassage); agent.massage(); // 如果顾客想要洗脚服务,就需要有WashAgent的一个代理 IWash iWash = new Tom(); WashAgent washAgent = new WashAgent(iWash); washAgent.wash(); // Tom 也可以提供按摩服务 iMassage = new Tom(); Agent agent1 = new Agent(iMassage); agent1.massage(); } }
运行结果:
总结: 从运行代码中可以看到,当顾客需要洗脚服务是,就要新建代理洗脚的代理类,这样如果顾客在需要其他服务的话,还要新建代理类,如此就会产生很多代理类出来。所以在这样的背景下就可以考虑用动态代理来解决创建多个代理类的麻烦了。