设计模式代理模式和工厂模式_如何在.Net中使用代理设计模式

设计模式代理模式和工厂模式

设计模式用于解决设计软件应用程序时反复出现的问题和复杂性。 “ 四人帮”设计模式分为三类:创造型,结构型和行为型。 创建设计模式用于创建和管理创建类实例的机制。 结构设计模式用于定义类型及其关系的结构。 行为设计模式用于管理对象之间的协作和对象之间的职责委派。 代理设计模式属于结构类别。

在处理应用程序时,您可能经常需要访问属于独立应用程序或域的对象。 在这些情况下,最好的做法是(出于代码维护和关注点分离的目的)将用于与外部应用程序或域进行通信的逻辑与用于访问对象本身的逻辑分开。 这就是代理设计模式起作用的地方。 四人帮定义的代理设计模式如下:

为另一个对象提供代理或占位符,以控制对其的访问。

本文讨论了何时以及为什么应该使用代理设计模式,以及如何在C#中实现代理设计模式。

[ Visual Studio Code入门 ,Microsoft的轻量级编辑器,适用于Windows,MacOS和Linux。 •了解最新版本的Visual Studio Code中的新增功能 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

为什么要使用代理设计模式?

代理设计模式可用于希望将类的实例化延迟到需要的时间的情况下。 代理是一个对象,可用于控制对远程资源或更复杂对象的访问,即,其创建或操作将消耗更多资源的对象。

代理对象可以是以下类型:

  1. 远程代理。 远程代理对请求进行编码,然后将编码后的请求发送到实际对象。
  2. 虚拟代理。 当实际物体很重时,通常使用虚拟代理。 为了节省客户端资源,他们将实际对象的实例化推迟到真正需要它时为止; 即,实例化仅按需完成。
  3. 保护代理。 保护代理用于限制对资源的访问。 如果请求的调用者缺乏访问资源的必要权限,则拒绝访问。

在C#中实现代理设计模式

在本节中,我们将研究如何在C#中实现代理设计模式。 代理设计模式的典型实现中的参与者是代理,主题和RealSubject。 代理维护访问RealSubject的引用时,Subject是为Proxy和RealSubject定义公共接口的类型。 就是说,让我们现在实现代理模式的简约实现。

在Visual Studio中创建一个新的控制台应用程序项目。 接下来,创建以下接口,称为ICalculate。

public interface ICalculate
    {
        double ComplexOperation(double x, double y);
    }

此接口包含ComplexOperation方法的声明。 尽管我们将使他的方法保持简单,但请记住,这里使用它来演示资源密集的复杂操作。

Subject类实现ICalculate接口。 此类包含ComplexOperation方法的定义。

class Subject : ICalculate
    {       
        public double ComplexOperation(double x, double y)
        {
            return x + y;
        }
    }

在C#中创建代理

在我们的示例中,代理由SimpleProxy类表示。 SimpleProxy对用户进行身份验证,如果调用方已通过身份验证,则对ComplexOperation进行调用。 如果调用方未通过身份验证,则返回值为0。

class SimpleProxy : ICalculate
    {
        public bool IsAuthenticated { get; private set; }
        private Subject subject = new Subject();
        public double ComplexOperation(double x, double y)
        {
            if (IsAuthenticated)
                return subject.ComplexOperation(x, y);
            else
                return 0;
        }
        public bool Authenticate(string pwd)
        {
            if (pwd == "password123")
            {
                IsAuthenticated = true;
                return true;
            }
            else
                return false;
        }
    }

在C#中调用代理

最后,这是客户端调用代理的方式。 请注意,这里的凭证已经过硬编码。 我将把它留给您以代理设计模式的这种结构实现为基础,并进行适当的更改。

static void Main(string[] args)
        {
            SimpleProxy simpleProxy = new SimpleProxy();
            simpleProxy.Authenticate("password123");
            Console.WriteLine(simpleProxy.ComplexOperation(5, 10));
            Console.Read();
        }

当您的应用程序中创建的对象昂贵时,代理设计模式是一个不错的选择。 当您希望拥有可以引用远程对象的本地对象,或者仅在需要时创建复杂对象时,也可以利用代理设计模式。

翻译自: https://www.infoworld.com/article/3304156/how-to-use-the-proxy-design-pattern-in-net.html

设计模式代理模式和工厂模式

你可能感兴趣的:(设计模式代理模式和工厂模式_如何在.Net中使用代理设计模式)