日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式的理解: 代理模式(Proxy)

發布時間:2024/10/14 122 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式的理解: 代理模式(Proxy) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?代理模式,用一個類來表示另外一個類的功能。所謂“代理”,即為“經紀人”。由于某些原因,用戶不可以直接訪問原始的類,比如說:要訪問的對象在遠程的機器上。在面向對象系統中,有些對象由于某些原因(比如對象創建開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問),直接訪問會給使用者或者系統結構帶來很多麻煩,我們可以在訪問此對象時加上一個對此對象的訪問層。代理模式可以為其他對象提供一種代理以控制對這個對象的訪問。

? ? 代理可以理解為經紀人,經紀人可以新增些特有的操作,而不用去修改原有對象。而且,用戶可以通過訪問經紀人的方式,避免直接訪問對象,從而保證了程序結構的安全性。

?

? ? 例如? ?:新增存款賬戶類,存折和銀行卡繼承存款賬戶類。

//存款賬戶抽象類 class DepositAccount{ public:virtual void save(double money); //存錢virtual void withdraw(double money); //取錢 }// 存折類 class Bankbook:public DepositAccount {private:string bookAccounts; //存折賬號 string bookPassword; //存折密碼double deposit; //存款public :void save(double money){/*....存折賬戶上累加存款金額.....*/deposit +=money;}void withdraw(double money){/*驗證賬戶安全操作*/....../*....存折賬戶上累減取款金額.....*/deposit -=money;} }// 銀行卡類 class BankCard:public DepositAccount {private:string cardAccounts; //存折賬號 string cardPassword; //存折密碼double deposit; //存款public :void save(double money){/*.... 銀行卡賬戶上累加存款金額.....*/deposit +=money;}void withdraw(double money){/*驗證賬戶安全操作*/....../*.... 銀行卡上累減取款金額.....*/deposit -=money;} }

由于某些原因,不可以直接訪問存折和銀行卡對象,只能訪問它們的代理類:支票對象

// 支票代理類 class Check:public DepositAccount { private:DepositAccount* depositAccount ; //存款賬號對象 double money_;void save(double money){depositAccount.save(money);}void withdraw(double money){depositAccount.withdraw(money);} public :Check(DepositAccount & depositAccount,double m){ this->depositAccount =depositAccount ;this->money_=m;}//轉賬操作void transfer(DepositAccount targetAccount){depositAccount->withdraw(money_);targetAccount.save(money_);//新增給目標賬戶發短信...sendmail(targetAccount);}//直接存款void save(){this->save(money_);}//直接取款void withdraw(){this->withdraw(money_); } }

外部主程序訪問操作:

void mainProcess(DepositAccount & depositAccount ){//可以不用關心傳進來的DepositAccount是存折還是銀行卡,都可以用支票類完成功能//并且可以避免直接訪問存款賬戶,提高系統結構的安全性Check withdrawCheck (depositAccount,2000000);withdrawCheck.withdraw(); }

?

動態代理可以代理多種不同類但是同父類的對象,通過訪問“中介”,由“中介”間接訪問實際對象。提高系統結構的擴展性?,系統結構職責更加清晰等。代理模式屬于對象結構型模式。

?

總結

以上是生活随笔為你收集整理的设计模式的理解: 代理模式(Proxy)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。