欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > asp.net >内容正文

asp.net

设计模式的理解: 代理模式(proxy) -ag凯发k8国际

发布时间:2024/10/14 asp.net 25 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 设计模式的理解: 代理模式(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(); }

 

动态代理可以代理多种不同类但是同父类的对象,通过访问“中介”,由“中介”间接访问实际对象。提高系统结构的扩展性 ,系统结构职责更加清晰等。代理模式属于对象结构型模式。

 

总结

以上是ag凯发k8国际为你收集整理的设计模式的理解: 代理模式(proxy)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图