本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
孝昌網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,孝昌網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為孝昌上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的孝昌做網(wǎng)站的公司定做!
在電商高速發(fā)展的今天,快遞的數(shù)量十分龐大,甚至出現(xiàn)了快遞代理行業(yè),簡單的說就是快遞的主人沒有時間收快遞,會指定一個快遞的代收點(diǎn),比如快遞柜,快遞驛站等,然后等有時間的時候再過去取,下面使用代碼對這個場景進(jìn)行簡單的描述。
public class C01_InScene {
public static void main(String[] args) {
/*自己收快遞的測試方式*/
GetExpress getExpress = new GetExpress();
getExpress.sureInfo();
getExpress.signName("張三");
/*代收快遞的測試方式*/
ExpressAct getUser = new GetExpress();
ExpressAct getProxy = new ProxyExpress(getUser);
getProxy.sureInfo();
getProxy.signName("李四");
}
}
/**
* 接收一個快遞的動作接口:確認(rèn)信息,簽名
*/
interface ExpressAct{
void sureInfo();
void signName(String name);
}
/**
* 定義一個類接收快遞:自己去拿快遞
*/
class GetExpress implements ExpressAct{
@Override
public void sureInfo() {
System.out.println("請確認(rèn)你的個人信息!");
}
@Override
public void signName(String name) {
System.out.println("你的名字是:"+name);
}
}
/**
* 定義一個類接收快遞:找人代領(lǐng)快遞
*/
class ProxyExpress implements ExpressAct{
private ExpressAct expressAct=null;
public ProxyExpress(ExpressAct expressAct){
this.expressAct = expressAct;
}
@Override
public void sureInfo() {
this.expressAct.sureInfo();
}
@Override
public void signName(String name) {
this.expressAct.signName(name);
}
}
代理模式是對象的結(jié)構(gòu)模式。代理模式給某一個對象提供一個代理對象,并由代理對象控制對原對象的引用。所謂代理,就是一個對象代表另一個對象執(zhí)行相應(yīng)的動作程序。而代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用。
聲明目標(biāo)對象和代理對象的共同接口。
定義了代理對象所代表的目標(biāo)對象。
代理對象內(nèi)部含有目標(biāo)對象的引用,可以在任何時候操作目標(biāo)對象;代理對象提供一個與目標(biāo)對象相同的接口,可以在任何時候替代目標(biāo)對象。代理對象通常在客戶端調(diào)用傳遞給目標(biāo)對象之前或之后,執(zhí)行某個操作,而不是單純地將調(diào)用傳遞給目標(biāo)對象,AOP編程就是基于這個思想。
public class C02_Proxy {
public static void main(String[] args) {
AbstractObject object = new ProxyObject();
object.operation();
}
}
/**
* 抽象對象角色
*/
abstract class AbstractObject{
public abstract void operation();
}
/**
* 目標(biāo)對象角色
*/
class TargetObject extends AbstractObject{
@Override
public void operation() {
System.out.println("Target Method Run...");
}
}
/**
* 代理對象角色
*/
class ProxyObject extends AbstractObject{
TargetObject targetObject = new TargetObject();
@Override
public void operation() {
System.out.println("Method Before...");
targetObject.operation();
System.out.println("Method After...");
}
}
基于JDK動態(tài)代理方式實現(xiàn)AOP切面編程。
public class C03_JdkProxy {
public static void main(String[] args) {
BookService bookService = BookAopProxyFactory.createService() ;
System.out.println(bookService.getBook());
}
}
class BookAspect {
public void before (){
System.out.println("Method Before ...");
}
public void after (){
System.out.println("Method After ...");
}
}
interface BookService {
String getBook () ;
}
class BookServiceImpl implements BookService {
@Override
public String getBook() {
System.out.println("目標(biāo)方法【getBook】被執(zhí)行");
return "高性能MySQL";
}
}
class BookAopProxyFactory {
public static BookService createService() {
// 目標(biāo)類
final BookService bookService = new BookServiceImpl() ;
// 切面類
final BookAspect bookAspect = new BookAspect();
/*
* 代理類:將目標(biāo)類(切入點(diǎn))和 切面類(通知) 結(jié)合
*/
BookService proxyBookService = (BookService) Proxy.newProxyInstance(
BookAopProxyFactory.class.getClassLoader(),
bookService.getClass().getInterfaces(),
new InvocationHandler() {
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
// 前執(zhí)行
bookAspect.before();
// 執(zhí)行目標(biāo)類的方法
Object obj = method.invoke(bookService, args);
// 后執(zhí)行
bookAspect.after();
return obj;
}
});
return proxyBookService ;
}
}
內(nèi)網(wǎng)通過代理穿透防火墻,實現(xiàn)對公網(wǎng)的訪問。
為了緩解網(wǎng)站并發(fā)壓力,在請求數(shù)據(jù)庫資源時,先取緩存中代理的數(shù)據(jù),如果緩存未命中,再到數(shù)據(jù)庫取數(shù)據(jù),然后緩存取到的數(shù)據(jù)。
遠(yuǎn)程對象的本地代理對象,通過它可以把遠(yuǎn)程對象當(dāng)本地對象調(diào)用 。遠(yuǎn)程代理通過網(wǎng)絡(luò)和調(diào)用的遠(yuǎn)程對象進(jìn)行信息交互 。
主要使用在多線程編程中,完成多線程間同步工作。
GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent
網(wǎng)站欄目:Java描述設(shè)計模式(16):代理模式
文章源于:http://muchs.cn/article8/pjjeop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站設(shè)計、定制開發(fā)、關(guān)鍵詞優(yōu)化、軟件開發(fā)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)