轉自:
http://www.java265.com/JavaCourse/202204/2997.html
下文筆者將講述Java設計模式之代理模式,如下所示
代理模式簡介
我們將采用間接的方式呼叫物件的模式稱之為“代理模式”
代理模式的分類
代理模式分為:
靜態代理類
動態代理類
靜態代理
package com.java265.other;
public class Test16 {
/**
* java265.com 示例程式
*/
public static void main(String... args) {
ChaZuo chaZuo = new ProxyChaZuo(new MeiGuiChaZuo());
chaZuo.chaDian();
}
}
interface ChaZuo {
void chaDian();
}
class MeiGuiChaZuo implements ChaZuo {
@Override
public void chaDian() {
System.out.println("我是一個美規插座");
}
}
class ZhongGuiChaZuo implements ChaZuo {
@Override
public void chaDian() {
System.out.println("我是一個中國插座");
}
}
/* 定義一個代理類 */
class ProxyChaZuo implements ChaZuo {
private ChaZuo chaZuo;
public ProxyChaZuo(ChaZuo chaZuo) {
this.chaZuo = chaZuo;
}
@Override
public void chaDian() {
chaZuo.chaDian();
}
}
-----運行以上代碼,將輸出以下資訊------
我是一個美規插座
動態代理
只需實作一個InvocationHandler介面 并重寫invoke方法即可
例:
package com.java265.other;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Test16 {
/**
* java265.com 示例程式
*/
public static void main(String... args) {
MeiGuiChaZuo meiGuiChaZuo = new MeiGuiChaZuo();
DynamicProxy dpy = new DynamicProxy();
ChaZuo chaZuo = (ChaZuo) dpy.proxyObj(meiGuiChaZuo);
chaZuo.chaDian();
}
}
/*
* 定義一個動態代理類
*/
class DynamicProxy implements InvocationHandler {
Object obj;
public Object proxyObj(Object obj) {
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object res = method.invoke(obj, args);
return res;
}
}
interface ChaZuo {
void chaDian();
}
class MeiGuiChaZuo implements ChaZuo {
@Override
public void chaDian() {
System.out.println("我是一個美規插座");
}
}
class ZhongGuiChaZuo implements ChaZuo {
@Override
public void chaDian() {
System.out.println("我是一個中國插座");
}
}
/* 定義一個代理類 */
class ProxyChaZuo implements ChaZuo {
private ChaZuo chaZuo;
public ProxyChaZuo(ChaZuo chaZuo) {
this.chaZuo = chaZuo;
}
@Override
public void chaDian() {
chaZuo.chaDian();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/499379.html
標籤:設計模式
上一篇:Java實作ATM架構設計
下一篇:Java實作ATM架構設計
