zoukankan      html  css  js  c++  java
  • Go!Go!Go!设计模式-代理设计模式

    零:前言

    参考:
    https://github.com/senghoo/golang-design-pattern/blob/master/09_proxy/proxy.go
    代理模式用于延迟处理操作或者在进行实际操作前后进行其它处理。


    核心原理:
    所谓代理,即首先代表自己的客户做一些事情,然后再让客户出面
    所以存在两种实现接口的结构体,分别扮演了两个角色:被代理者(本体) 和 代理者,
    后者将前者的"实例"作为自己的一部分,在调用本体方法之前或之后会先调用代理的额外逻辑

    步骤:
    1. 将行为抽象出一个接口
    2. 两种类分别实现该接口,一个作为被代理者,一个作为代理者
    被代理者作为本体实现自己的核心业务
    代理者将本体实例作为自己的一部分,实现的接口方法中除了调用核心业务外,还会做一些其他代理需要做的事情

    一:样例

    //1. 总接口
    type Subject interface {
        Do() string
    }
    //2. 总结构体,即被代理的对象,实现接口要求的方法
    type RealSubject struct{}
    func (RealSubject) Do() string {
        return "real"
    }
    
    //3.代理结构体,内置被代理对象的一个的实例; 代理也实现了总接口方法,方法内部会首先增加代理特有的工作,然后才调用被代理者的方法
    type Proxy struct {
        real RealSubject
    }
    
    func (p Proxy) Do() string {
        var res string
    
        res += "pre:"        //1)before: 在调用真实对象之前的工作,检查缓存,判断权限,实例化真实对象等。。
        res += p.real.Do()   //2)调用被代理对象的业务方法
        res += ":after"      //3)after:调用之后的操作,如缓存结果,对结果进行处理等。。
    
        return res
    }
  • 相关阅读:
    JavaWeb网站技术架构
    fullcalendar插件日程管理
    PuTTY/终端使用复制、粘贴
    JAVA PERSISTENCE API (JPA)
    mysql查询当天所有数据sql语句
    Sign http
    js在新页面中返回到上一页浏览的历史位置
    Android使用Activity用作弹出式对话框
    android listview局部刷新和模拟应用下载
    如何获取drawable目录下的图片绝对路径
  • 原文地址:https://www.cnblogs.com/shuiguizi/p/14265780.html
Copyright © 2011-2022 走看看