1.代理模式定义

代理对象控制着对原对象得访问,并允许将请求提交给原对象前后进行一些处理
在这里插入图片描述
信用卡是银行账户的代理, 银行账户则是一大捆现金的代理。 它们都实现了同样的接口, 均可用于进行支付。 消费者会非常满意, 因为不必随身携带大量现金; 商店老板同样会十分高兴, 因为交易收入能以电子化的方式进入商店的银行账户中, 无需担心存款时出现现金丢失或被抢劫的情况。

2.UML类图

在这里插入图片描述
抽象服务接口(Service Interface): 声明了真实服务和代理的公共接口,这样一来在使用真实服务的任何地方都可以使用代理。
代理(Proxy): 代理内部含有对真实服务的引用,从而可以操作真实服务对象;代理服务负责在需要的时候创建真实服务对象;代理服务通常在将客户端调用传递到真实服务之前或之后,都要执行一些其他的操作,而不是单纯地将调用传递给真实服务对象。
真实服务(Server): 实现了抽象服务接口的真实服务

3.实现代码

抽象服务接口:

public interface IServer
{
    void Request();
}

真实服务:

public class RealServer : IServer
{
    public void Request()
    {
        Console.WriteLine("RealServer: Handling request.");
    }
}

代理:

public class Proxy : IServer
{
    private RealServer _realServer;

    public Proxy(RealServer realSubject)
    {
        _realServer = realSubject;
    }

    public void Request()
    {
        CheckAccess();
        _realServer.Request();
        LogAccess();
    }

    private bool CheckAccess()
    {
        // Some real checks should go here.
        Console.WriteLine("Proxy: Checking access prior to firing a real request.");

        return true;
    }
    
    private void LogAccess()
    {
        Console.WriteLine("Proxy: Logging the time of request.");
    }
}

使用:

RealServer realServer = new RealServer();
Proxy proxy = new Proxy(realServer);
proxy.Request();

Proxy: Checking access prior to firing a real request.
RealServer: Handling request.
Proxy: Logging the time of request.

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部