代理模式

代理模式是指结构设计模式。
该模式描述了通过类层处理类的技术——代理人。代理允许您更改原始类的功能,并且能够保留原始行为,同时维护原始类接口。
让我们想象一下这种情况– 2015年,西欧国家之一决定记录该国用户网站的所有请求,以改进统计并深入了解公民的政治情绪。
让我们想象一下公民用来访问互联网的网关的简单实现的伪代码:

class InternetRouter {

    private let internet: Internet

    init(internet: Internet) {
        self.internet = internet
    }

    func handle(request: Request, from client: Client) -> Data {
        return self.internet.handle(request)
    }

}

在上面的代码中,我们创建了一个 Internet 路由器类,其中包含一个指向提供 Internet 访问的对象的指针。当客户发出网站请求时,我们会从互联网返回响应。

使用代理模式和单例反模式,我们将添加用于记录客户端名称和 URL 的功能:

class InternetRouterProxy {

    private let internetRouter: InternetRouter

    init(internet: Internet) {
        self.internetRouter = InternetRouter(internet: internet)
    }

    func handle(request: Request, from client: Client) -> Data {

        Logger.shared.log(“Client name: \(client.name), requested URL: \(request.URL)”)

        return self.internetRouter.handle(request: request, from: client)
    }

}

由于代理类InternetRouterProxy中保留了原始InternetRouter接口,因此只需将InternerRouter中的初始化类替换为其代理即可,无需进一步更改代码库。

来源

https://refactoring.guru/ru/design-patterns/代理

Leave a Comment

Your email address will not be published. Required fields are marked *