代理是一种设计模式,提供了对目标对象另一种访问方式。。。可以对其功能进行扩展(符合OCP原则)
我们先来看静态代理。。(1)静态代理中代理对象必须和目标对象实现统一的接口
先定义接口类 IStudent
1 package cn.secol.static_proxy;2 3 public interface IStudent {4 void learn();5 }
目标对象类StudentImp
1 package cn.secol.static_proxy; 2 /** 3 * 目标对象 4 * @author Administrator 5 * 6 */ 7 public class StudentImp implements IStudent { 8 9 @Override10 public void learn() {11 System.out.println("演示静态代理");12 }13 14 }
代理对象类StudentProxy
package cn.secol.static_proxy;/** * 代理对象 * @author Administrator * */public class StudentProxy implements IStudent { //目标对象的引用 private StudentImp stu; public StudentProxy(StudentImp stu) { this.stu = stu; } @Override public void learn() { System.out.println("处理前code..."); stu.learn(); System.out.println("处理后code..."); }}
测试类TestDemo
package cn.secol.static_proxy;
import org.junit.Test;/** * 测试类 * @author Administrator * */public class TestDemo { @Test public void fun1(){ StudentProxy proxy = new StudentProxy(new StudentImp()); proxy.learn(); }}运行结果:处理前code...演示静态代理处理后code...
静态代理的优缺点:
1.因为代理对象需要与目标对象实现一样的接口 ,所以会造成多出很多代理类(可以用代理工厂改进)2.一旦接口添加方法,代理对象和目标对象都要做出改变(违背了OCP原则)