Apple.java
package com.southwind.dymicproxy; public class Apple implements Phone { @Override public String salePhone() { // TODO Auto-generated method stub return "销售iPhone手机"; } }
Benz.java
package com.southwind.dymicproxy; public class Benz implements Car { @Override public String saleCar() { // TODO Auto-generated method stub return "销售奔驰汽车"; } }
BMW.java
package com.southwind.dymicproxy; public class BMW implements Car { @Override public String saleCar() { // TODO Auto-generated method stub return "销售宝马汽车"; } }
Car.java
package com.southwind.dymicproxy; public interface Car { public String saleCar(); }
House.java
package com.southwind.dymicproxy; public interface House { public String saleHouse(); }
HuaWei.java
package com.southwind.dymicproxy; public class HuaWei implements Phone { @Override public String salePhone() { // TODO Auto-generated method stub return "销售华为手机"; } }
MyInvocationHandler.java
package com.southwind.dymicproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class MyInvocationHandler implements InvocationHandler { private Object obj; //返回代理对象 public Object bind(Object obj) { this.obj = obj; return Proxy.newProxyInstance(MyInvocationHandler.class.getClassLoader(), this.obj.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println("日志。。。"); return method.invoke(this.obj, args); } }
Num.java
package com.southwind.dymicproxy; public class Num implements House { @Override public String saleHouse() { // TODO Auto-generated method stub return "卖别墅"; } }
Phone.java
package com.southwind.dymicproxy; public interface Phone { public String salePhone(); }
Test.java
package com.southwind.dymicproxy; public class Test { public static void main(String[] args) { Phone phone = new Apple(); //获取代理对象 MyInvocationHandler myInvocationHandler = new MyInvocationHandler(); Phone proxy = (Phone)myInvocationHandler.bind(phone); System.out.println(proxy.salePhone()); Car car = new BMW(); Car carProxy = (Car)myInvocationHandler.bind(car); System.out.println(carProxy.saleCar()); House house = new Num(); House houseProxy = (House)myInvocationHandler.bind(house); System.out.println(houseProxy.saleHouse()); } }
Cal.java
package com.southwind.proxy; public interface Cal { public int add(int num1,int num2); public int sub(int num1,int num2); public int mul(int num1,int num2); public int div(int num1,int num2); }
CalImpl.java
package com.southwind.proxy; public class CalImpl implements Cal { @Override public int add(int num1, int num2) { // TODO Auto-generated method stub int result = num1+num2; return result; } @Override public int sub(int num1, int num2) { // TODO Auto-generated method stub int result = num1-num2; return result; } @Override public int mul(int num1, int num2) { // TODO Auto-generated method stub int result = num1*num2; return result; } @Override public int div(int num1, int num2) { // TODO Auto-generated method stub int result = num1/num2; return result; } }
MyInvocationHandler.java
package com.southwind.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Arrays; public class MyInvocationHandler implements InvocationHandler { //委托对象 private Object object; //返回代理对象 public Object bind(Object object) { this.object = object; return Proxy.newProxyInstance(MyInvocationHandler.class.getClassLoader(), this.object.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println(method.getName()+"方法的参数是:"+Arrays.toString(args)); Object result = method.invoke(this.object, args); System.out.println(method.getName()+"方法的执行结果是:"+result); return result; } }
Test.java
package com.southwind.proxy; public class Test { public static void main(String[] args) { Cal cal = new CalImpl(); //获取动态代理对象 MyInvocationHandler myInvocationHandler = new MyInvocationHandler(); Cal proxy = (Cal) myInvocationHandler.bind(cal); System.out.println(proxy.add(10, 1)); System.out.println(proxy.sub(20, 2)); System.out.println(proxy.mul(30, 3)); System.out.println(proxy.div(40, 4)); } }
Apple.java
package com.southwind.staticproxy; public class Apple implements Phone { @Override public String salePhone() { // TODO Auto-generated method stub return "销售iPhone手机"; } }
Benz.java
package com.southwind.staticproxy; public class Benz implements Car { @Override public String saleCar() { // TODO Auto-generated method stub return "销售奔驰汽车"; } }
BMW.java
package com.southwind.staticproxy; public class BMW implements Car { @Override public String saleCar() { // TODO Auto-generated method stub return "销售宝马汽车"; } }
Car.java
package com.southwind.staticproxy; public interface Car { public String saleCar(); }
CarProxy.java
package com.southwind.staticproxy; public class CarProxy implements Car { private Car car; public CarProxy(Car car) { this.car = car; } @Override public String saleCar() { // TODO Auto-generated method stub System.out.println("汽车日志。。。"); return this.car.saleCar(); } }
House.java
package com.southwind.staticproxy; public interface House { public String saleHouse(); }
Huawei.java
package com.southwind.staticproxy; public class HuaWei implements Phone { @Override public String salePhone() { // TODO Auto-generated method stub return "销售华为手机"; } }
Phone.java
package com.southwind.staticproxy; public interface Phone { public String salePhone(); }
PhoneProxy.java
package com.southwind.staticproxy; public class PhoneProxy implements Phone { private Phone phone; public PhoneProxy(Phone phone) { this.phone = phone; } @Override public String salePhone() { // TODO Auto-generated method stub System.out.println("日志。。。"); return this.phone.salePhone(); } }
Proxy.java
package com.southwind.staticproxy; public class Proxy implements Car,Phone,House{ private Object obj; public Proxy(Object obj) { this.obj = obj; } @Override public String saleCar() { // TODO Auto-generated method stub System.out.println("汽车日志。。。"); if(obj instanceof Car) { Car car = (Car) obj; return car.saleCar(); }else { System.out.println("数据类型错误"); return null; } } @Override public String salePhone() { // TODO Auto-generated method stub System.out.println("手机日志。。。"); if(obj instanceof Phone) { Phone phone = (Phone) obj; return phone.salePhone(); }else { System.out.println("数据类型错误"); return null; } } @Override public String saleHouse() { // TODO Auto-generated method stub return null; } }
Test.java
package com.southwind.staticproxy; public class Test { public static void main(String[] args) { Phone phone1 = new Apple(); Phone phone2 = new HuaWei(); PhoneProxy phoneProxy = new PhoneProxy(phone1); System.out.println(phoneProxy.salePhone()); } }
Test2.java
package com.southwind.staticproxy; public class Test2 { public static void main(String[] args) { Car car = new BMW(); CarProxy carProxy = new CarProxy(car); System.out.println(carProxy.saleCar()); } }
Test3.java
package com.southwind.staticproxy; public class Test3 { public static void main(String[] args) { Phone phone = new Apple(); Proxy proxy = new Proxy(phone); System.out.println(proxy.salePhone()); Car car = new Benz(); proxy = new Proxy(car); System.out.println(proxy.saleCar()); } }