الگوی وکالت در برنامه نویسی، از جمله الگوهای طراحی نرم افزار است.
در ارتباطات اشیاء توزیع شده، از یک شیء محلی به عنوان نمایش دهنده شیء خارجی ( که متعلق به یک فضای خارجی از آدرس دهی ها است ) است. شیء محلی به عنوان وکیل شیء خارجی شناخته می شود، و اجرای توابع شیء محلی به اجرای توابع در شیء اصلی می انجامد. به عنوان مثال: دستگاه خودپرداز، که در آن یک وکیل از اطلاعات بانکی در سرور خارجی وجود دارد.
در مواجهه به شیء پیچیده یا سنگین وزن ( از نظر حافظه ) ، در بعضی موارد نشان دادن تنها بدنه ای از شیء می تواند مفیدتر باشد. وقتی که تصویر ایجاد شده اندازه بزرگی داشته باشد، می تواند توسط یک وکیل مجازی، که بر روی شیء واقعی پیاده سازی شده، نشان داده شود.
برای محافظت از کنترل دسترسی ها می توان این وظیفه را به یک وکیل سپرد.
interface ICar { void DriveCar ( ) ; } // Real Object public class Car : ICar { public void DriveCar ( ) { Console. WriteLine ( " Car has been driven!" ) ; } } //Proxy Object public class ProxyCar : ICar { private Driver driver; private ICar realCar; public ProxyCar ( Driver driver ) { this. driver = driver; this. realCar = new Car ( ) ; } public void DriveCar ( ) { if ( driver. Age < = 16 ) Console. WriteLine ( " Sorry, the driver is too young to drive. " ) ; else this. realCar. DriveCar ( ) ; } } public class Driver { private int Age { get; set; } public Driver ( int age ) { this. Age = age; } } // How to use above Proxy class? private void btnProxy_Click ( object sender, EventArgs e ) { ICar car = new ProxyCar ( new Driver ( 16 ) ) ; car. DriveCar ( ) ; car = new ProxyCar ( new Driver ( 25 ) ) ; car. DriveCar ( ) ; } خروجی
Sorry, the driver is too young to drive. Car has been driven! یادداشت:
• وکیل ممکن است اطلاعاتی از شیء حقیقی را از کاربر مخفی کند.
• پروکسی ممکن است بهینه سازی هایی انجام دهد. به طور مثال فراخوانی تنها در هنگام نیاز.
• وکیل ممکن است کارهای اضافه تری در قبال شیء اصلی انجام دهد، مثل انجام حسابرسی ها.
• الگوی وکالت با عنوان الگوی جانشینی نیز شناخته می شود.
class ICar { public: virtual void DriveCar ( ) = 0; }; class Car : public ICar { void DriveCar ( ) override { std::cout < < " Car has been driven!" ; } }; class ProxyCar : public ICar { private: ICar* realCar = new Car ( ) ; int _driver_age; public: ProxyCar ( const int driver_age ) : _driver_age ( driver_age ) {} void DriveCar ( ) { if ( _driver_age> 16 ) realCar - > DriveCar ( ) ; else std::cout < < " Sorry, the driver is too young to drive. " ; } }; // How to use above Proxy class? void main ( ) { ICar* car = new ProxyCar ( 16 ) ; car - > DriveCar ( ) ; delete car; car = new ProxyCar ( 25 ) ; car - > DriveCar ( ) ; delete car; } کریستال abstract class AbstractCar abstract def drive end class Car < AbstractCar def drive puts " Car has been driven!" end end class Driver getter age : Int32 def initialize ( @age ) end end class ProxyCar < AbstractCar private getter driver : Driver private getter real_car : AbstractCar def initialize ( @driver ) @real_car = Car. new end def drive if driver. age < = 16 puts " Sorry, the driver is too young to drive. " else @real_car. drive end end end # Program driver = Driver. new ( 16 ) car = ProxyCar. new ( driver ) car. drive driver = Driver. new ( 25 ) car = ProxyCar. new ( driver ) car. drive خروجی

این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفدر ارتباطات اشیاء توزیع شده، از یک شیء محلی به عنوان نمایش دهنده شیء خارجی ( که متعلق به یک فضای خارجی از آدرس دهی ها است ) است. شیء محلی به عنوان وکیل شیء خارجی شناخته می شود، و اجرای توابع شیء محلی به اجرای توابع در شیء اصلی می انجامد. به عنوان مثال: دستگاه خودپرداز، که در آن یک وکیل از اطلاعات بانکی در سرور خارجی وجود دارد.
در مواجهه به شیء پیچیده یا سنگین وزن ( از نظر حافظه ) ، در بعضی موارد نشان دادن تنها بدنه ای از شیء می تواند مفیدتر باشد. وقتی که تصویر ایجاد شده اندازه بزرگی داشته باشد، می تواند توسط یک وکیل مجازی، که بر روی شیء واقعی پیاده سازی شده، نشان داده شود.
برای محافظت از کنترل دسترسی ها می توان این وظیفه را به یک وکیل سپرد.
interface ICar { void DriveCar ( ) ; } // Real Object public class Car : ICar { public void DriveCar ( ) { Console. WriteLine ( " Car has been driven!" ) ; } } //Proxy Object public class ProxyCar : ICar { private Driver driver; private ICar realCar; public ProxyCar ( Driver driver ) { this. driver = driver; this. realCar = new Car ( ) ; } public void DriveCar ( ) { if ( driver. Age < = 16 ) Console. WriteLine ( " Sorry, the driver is too young to drive. " ) ; else this. realCar. DriveCar ( ) ; } } public class Driver { private int Age { get; set; } public Driver ( int age ) { this. Age = age; } } // How to use above Proxy class? private void btnProxy_Click ( object sender, EventArgs e ) { ICar car = new ProxyCar ( new Driver ( 16 ) ) ; car. DriveCar ( ) ; car = new ProxyCar ( new Driver ( 25 ) ) ; car. DriveCar ( ) ; } خروجی
Sorry, the driver is too young to drive. Car has been driven! یادداشت:
• وکیل ممکن است اطلاعاتی از شیء حقیقی را از کاربر مخفی کند.
• پروکسی ممکن است بهینه سازی هایی انجام دهد. به طور مثال فراخوانی تنها در هنگام نیاز.
• وکیل ممکن است کارهای اضافه تری در قبال شیء اصلی انجام دهد، مثل انجام حسابرسی ها.
• الگوی وکالت با عنوان الگوی جانشینی نیز شناخته می شود.
class ICar { public: virtual void DriveCar ( ) = 0; }; class Car : public ICar { void DriveCar ( ) override { std::cout < < " Car has been driven!" ; } }; class ProxyCar : public ICar { private: ICar* realCar = new Car ( ) ; int _driver_age; public: ProxyCar ( const int driver_age ) : _driver_age ( driver_age ) {} void DriveCar ( ) { if ( _driver_age> 16 ) realCar - > DriveCar ( ) ; else std::cout < < " Sorry, the driver is too young to drive. " ; } }; // How to use above Proxy class? void main ( ) { ICar* car = new ProxyCar ( 16 ) ; car - > DriveCar ( ) ; delete car; car = new ProxyCar ( 25 ) ; car - > DriveCar ( ) ; delete car; } کریستال abstract class AbstractCar abstract def drive end class Car < AbstractCar def drive puts " Car has been driven!" end end class Driver getter age : Int32 def initialize ( @age ) end end class ProxyCar < AbstractCar private getter driver : Driver private getter real_car : AbstractCar def initialize ( @driver ) @real_car = Car. new end def drive if driver. age < = 16 puts " Sorry, the driver is too young to drive. " else @real_car. drive end end end # Program driver = Driver. new ( 16 ) car = ProxyCar. new ( driver ) car. drive driver = Driver. new ( 25 ) car = ProxyCar. new ( driver ) car. drive خروجی


wiki: الگوی وکالت