zoukankan      html  css  js  c++  java
  • 设计模式(12)代理模式

    模式介绍

    代理模式提供代理或占位符对象来控制对另一个不同对象的访问。代理对象可以以与包含对象的方式相同的方式使用。

    示例

    我们再次以高端餐馆的服务员来建模,服务员需要做三件事情:

    1. 取单
    2. 下单
    3. 结账

    抽象的服务员接口:

    /// <summary>
    /// The Subject interface which both the RealSubject and proxy will need to implement
    /// </summary>
    public interface IServer
    {
        void TakeOrder(string order);
        string DeliverOrder();
        void ProcessPayment(string payment);
    }
    

    服务员类:

    /// <summary>
    /// The RealSubject class which the Proxy can stand in for
    /// </summary>
    class Server : IServer
    {
        private string Order;
        public void TakeOrder(string order)
        {
            Console.WriteLine("Server takes order for " + order + ".");
            Order = order;
        }
    
        public string DeliverOrder()
        {
            return Order;
        }
    
        public void ProcessPayment(string payment)
        {
            Console.WriteLine("Payment for order (" + payment + ") processed.");
        }
    }
    

    现在想象一下,我们的服务员实例是一个有经验的服务员,它正在培训一个新服务员。
    从顾客的角度来看,这名新员工仍然是一个服务员,并且仍将如此行事。然而,新服务员无法处理付款,因为他必须首先学习订单处理。

    我们可以创建一个代理来对这个新员工建模。代理需要维护引用到服务员实例,以便它可以调用Server实例的PraseSpayMeMess()方法:

    /// <summary>
    /// The Proxy class, which can substitute for the Real Subject.
    /// </summary>
    class NewServerProxy : IServer
    {
        private string Order;
        private Server _server = new Server();
    
        public void TakeOrder(string order)
        {
            Console.WriteLine("New trainee server takes order for " + order + ".");
            Order = order;
        }
    
        public string DeliverOrder()
        {
            return Order;
        }
    
        public void ProcessPayment(string payment)
        {
            Console.WriteLine("New trainee cannot process payments yet!")
            _server.ProcessPayment(payment);
        }
    }
    

    总结

    代理模式试图创建一个“备用”对象,该对象可以用来代替现有对象,并维护对所述现有对象的实例的引用。
    为了实现该模式,代理对象必须能够在被替换对象可以使用的任何地方使用。

    源代码

    https://github.com/exceptionnotfound/DesignPatterns/tree/master/Proxy

    原文

    https://www.exceptionnotfound.net/proxy-the-daily-design-pattern/

  • 相关阅读:
    double保存小数点后两位
    二维数组做函数参数,及地址问题
    解决应用程序无法正常启动0xcxxxxxxxxxx问题
    docker+selenium grid解决node执行经常卡死
    docker+selenium Grid搭建自动化分布式测试环境
    Docker+Selenium Grid+Python搭建分布式测试环境
    xshell无法连接Ubuntu的解决办法
    docker获取镜像很慢解决办法
    django使用ajax传输数据
    $.ajax()所有参数详解
  • 原文地址:https://www.cnblogs.com/talentzemin/p/9883726.html
Copyright © 2011-2022 走看看