當前位置:
首頁 >
设计模式的理解: 代理模式(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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式的理解 : 门面模式、外观模式
- 下一篇: 设计模式的理解: 适配器模式 Adapt