interface Function{
void f();
}class BackRun implements Function{
public void f(){
System.out.println("BackRun");
}
}
public class Proxy implements Function{
public void f(){
System.out.println("proxy");
}
}class ForeRun{
public static void main(String[] args) {
Function x = new Proxy();
x.f();
}
}
void f();
}class BackRun implements Function{
public void f(){
System.out.println("BackRun");
}
}
public class Proxy implements Function{
public void f(){
System.out.println("proxy");
}
}class ForeRun{
public static void main(String[] args) {
Function x = new Proxy();
x.f();
}
}
void f();
}class BackRun implements Function{
public void f(){
System.out.println("BackRun");
}
}
public class Proxy implements Function{
private Function func;
public Proxy(Function func){this.func=func;}
public void f(){
System.out.println("proxy");
func.f();
}
}class ForeRun{
public static void main(String[] args) {
Function x = new Proxy();
x.f();
}
}
interface Function{
void f();
} class BackRun implements Function{
public void f(){
System.out.println("BackRun");
}
}
public class Proxy implements Function{
private BackRun backRun;
public Proxy(){
if(backRun == null)
backRun = new BackRun();
}
public void f(){
System.out.println("proxy");
backRun.f();
}
} class ForeRun{
public static void main(String[] args) {
Function x = new Proxy();
x.f();
}
}
Function x = new Proxy();
new Proxy();里面得放个参,指定你要给谁做代理`~
这个是写死的代理就只能给固定的BackRun做代理了`~~
class ForeRun{
public static void main(String[] args) {
Function x = new Proxy(BackRun);
x.f();
}
}
public Proxy(){
if(backRun == null)
backRun = new BackRun();
}其实就是在代理的构造器中声明要为BackRun做代理,对应现在的小程序是没有问题的。
class ForeRun{
public static void main(String[] args) {
Function x = new Proxy(BackRun);
x.f();
}
}这样这样~~·
参考下数据库连接池的代理模式实现吧:import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;public class ConnectionHandler implements InvocationHandler {
private Connection con;
private connectionPool pool;
public ConnectionHandler(connectionPool pool){
this.pool = pool;
}
public Connection bind(Connection con){
this.con = con;
Connection proxyCon = (Connection)Proxy.newProxyInstance(con.getClass().getClassLoader(),
con.getClass().getInterfaces(), this);
return proxyCon;
}
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
// TODO Auto-generated method stub
Object obj = null;
if("close".equals(arg1.getName())){
pool.releaseConnection(con);
}else{
obj = arg1.invoke(con, arg2);
}
return obj;
}}