署理模式(静态以及动态)
代理模式(静态以及动态)
代理接口:
RealSubject:
代理类:
测试:
另外一种代理模式:
动态代理:
动态代理测试:
代理接口:
package ProxyPattern; public interface Italk { public void talk(String msg); }
RealSubject:
package ProxyPattern; public class People implements Italk { public String username; public String age; public String getName() { return username; } public void setName(String name) { this.username = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public People(String name1, String age1) { this.username = name1; this.age = age1; } public void talk(String msg) { System.out.println(msg + "!你好,我是" + username + ",我年龄是" + age); } }
代理类:
package ProxyPattern; public class TalkProxy implements Italk { Italk people; public TalkProxy(Italk people) { this.people = people; } public void talkProxy(Italk people) { this.people = people; } public void talk(String msg) { people.talk(msg); } public void talk(String msg, String singname) { people.talk(msg); sing(singname); } private void sing(String singname) { System.out.println("唱歌:" + singname); } }
测试:
package ProxyPattern; public class MyProxyTest { public static void main(String[] args) { People people1 = new People("湖海散人", "18"); people1.talk("No ProXY Test"); System.out.println("-----------------------------"); TalkProxy talker = new TalkProxy(people1); talker.talk("ProXY Test", "七里香"); } }
另外一种代理模式:
动态代理:
package Dybamic; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class Handler implements InvocationHandler { public Object targetObj; public Handler(Object targetObj) { this.targetObj = targetObj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before the function \"" + method.getName() + "\""); Object ret = method.invoke(targetObj, args); System.out.println(ret); System.out.println("after the function \"" + method.getName() + "\""); return ret; } }
动态代理测试:
package ProxyPattern; package Dybamic; import java.lang.reflect.Proxy; public class testMain { public static void main(String[] args) { IUser realUser = new UserImp("sun"); Handler hand = new Handler(realUser); IUser proxy = (IUser) Proxy.newProxyInstance(realUser.getClass() .getClassLoader(), realUser.getClass().getInterfaces(), hand); proxy.getName(); } }