動態代理模式
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
*所有行業代理商
*有了它我們的客戶可以通過他買個各種產品
*/
public class AllthingsProxy implements InvocationHandler{
private Logger logger=
Logger.getLogger(this.getClass().getName());
private Object allthings;
//實現物件繫結
public Object bind(Object allthings){
this.allthings = allthings;
//這裡傳入newProxyInstance的引數分別是 目標object
//(Lianxiang,Sanxing),interface(Computer),AllthingsProxy
return Proxy.newProxyInstance(allthings.getClass().getClassLoader(),
allthings.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
try{
log("method starts " + method);
result=method.invoke(allthings, args);
logger.log(Level.INFO , "method ends " + method);
}catch(Exception e){
log(e.toString());
}
return result;
}
private void log(String msg){
logger.log(Level.INFO,msg);
}
}
-----------------------------
package 動態代理模式;
/*
*汽車批發商
*這樣我們的程式碼中就有了電腦和汽車這兩個批發商
*/
public interface Car {
public void buyCar(String name);
}
------------------------
package 動態代理模式;
/**
* 勞斯萊斯產品
* @author Administrator
*
*/
public class RollsRoyce implements Car{
public void buyCar(String name) {
System.out.println(name+" 公司:|勞斯萊斯公司!");
}
}
------------------------
package 動態代理模式;
/*
*三個客戶兩個買電腦一個買汽車
*他們找到同個代理商
*/
public class Buything {
public static void main(String args[]){
AllthingsProxy allthingsproxy = new AllthingsProxy();
Computer lenovoProxy=(Computer)allthingsproxy.bind(new Lenovo());
lenovoProxy.buyComputer("我想買一臺聯想電腦");
/*
Computer SanxingProxy=(Computer)allthingsproxy.bind(new Sanxing());
SanxingProxy.buyComputer("我想買一臺三星電腦");
*/
Car rRollsRoyceProxy=(Car)allthingsproxy.bind(new RollsRoyce());
rRollsRoyceProxy.buyCar("我想買一輛勞斯萊斯汽車");
}
}
------------------------
package 動態代理模式;
/*
*汽車批發商
*這樣我們的程式碼中就有了電腦和汽車這兩個批發商
*/
public interface Computer {
public void buyComputer(String name);
}
------------------------
package 動態代理模式;
public class Lenovo implements Computer{
@Override
public void buyComputer(String name) {
System.out.println(name+" 公司: |聯想!");
}
}
------------------------
------------------------
相關文章
- 代理模式 - 動態代理模式
- 代理模式詳解:靜態代理、JDK動態代理與Cglib動態代理模式JDKCGLib
- Java設計模式-之代理模式(動態代理)Java設計模式
- 【JAVA】代理模式之Java動態代理Java模式
- 設計模式:動態代理設計模式
- 【設計模式】-代理模式及動態代理詳解設計模式
- 求助,動態代理模式的困惑模式
- 設計模式總結——代理模式以及java的動態代理設計模式Java
- 23種設計模式之——動態代理模式設計模式
- 設計模式_JAVA動態代理設計模式設計模式Java
- Java設計模式學習06——靜態代理與動態代理Java設計模式
- 面試常問的設計模式之代理模式的詳細解析!分析說明靜態代理模式和動態代理模式面試設計模式
- JavaScript代理模式,怎麼實現物件的動態代理?JavaScript模式物件
- Java代理(jdk靜態代理、動態代理和cglib動態代理)JavaJDKCGLib
- 設計模式之cglib動態代理設計模式CGLib
- android常用設計模式之代理設計模式及動態代理原理Android設計模式
- 由《尋秦記》說代理模式(靜態,動態,CGLib)模式CGLib
- 靜態代理和動態代理
- JAVA 靜態代理 & 動態代理Java
- 代理模式-靜態代理解讀模式
- 【菜鳥學Java】13:代理模式——動態代理這樣玩!Java模式
- Java代理設計模式(Proxy)的四種具體實現:靜態代理和動態代理Java設計模式
- 【趣味設計模式系列】之【代理模式2--JDK動態代理原始碼解析】設計模式JDK原始碼
- 設計模式學習筆記(七)代理模式以及動態代理的實現設計模式筆記
- 設計模式(一) 動態代理初嘗試設計模式
- 10分鐘看懂動態代理設計模式設計模式
- Java靜態代理模式Java模式
- java靜態代理和動態代理Java
- 動態代理
- 23種設計模式之代理模式(靜態代理)設計模式
- 【趣味設計模式系列】之【代理模式3--Cglib動態代理原始碼解析】設計模式CGLib原始碼
- AOP之靜態代理VS動態代理
- JDK動態代理JDK
- java動態代理Java
- java動態代理動態在哪裡?Java
- 輕鬆理解 Java 靜態代理/動態代理Java
- 3.靜態代理&動態代理&CGlibCGLib
- Java中的靜態代理和動態代理Java