代理模式(Proxy)
简介代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。
使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。
模式定义
代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。
使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。
模式优缺点
优点
- 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
- 代理对象可以扩展目标对象的功能;
- 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度
缺点
- 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
- 增加了系统的复杂度;
适用场景
- 远程代理,也就是为了一个对象在不同的地址空间提供局部的代表,这样可以隐藏一个对象在于不同的地址空间的事实;
- 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象;
- 安全代理,用来控制真实对象的访问时权限;
模式结构
- 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法;
- 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象;
- 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能;
模式实现
package com.company.proxy;
public class ProxyPattern {
public static void main(String[] args) {
Subject proxy = new Proxy();
proxy.request();
}
}
//抽象主题
interface Subject {
void request();
}
//具体主题
class AreaOne implements Subject {
@Override
public void request() {
System.out.println("区域1,请求");
}
}
//代理主题
class Proxy implements Subject {
Subject area;
public Proxy() {
System.out.println("代理处理");
this.area = new AreaOne();
}
@Override
public void request() {
System.out.println("代理请求");
area.request();
}
}
运行结果:
代理处理
代理请求
区域1,请求
快速生成表格
Tauri 是一个框架,用于为所有主要桌面平台构建小巧、快速的二进制文件。开发人员可以集成任何可编译为 HTML、JS 和 CSS 的前端框架,以构建他们的用户界面。应用程序的后端是一个基于 Rust 的二进制文件,带有一个前端可以与之交互的 API。
Tauri 应用程序的用户界面目前在 macOS 和 Windows 上利用 tao 作为窗口处理库,在 Linux 上通过 Tauri 团队孵化和维护的 WRY 利用 WebKit、Windows 上的 WebView2 和 Linux 上的 WebKitGTK 创建一个统一的系统 webview(和其他好东西,如菜单和任务栏)接口。
以前配置了服务器的免密登录,但是后期重新装了操作系统,那么再次尝试却出现了WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!提示,那么我们需要将以前的公钥删掉
Towxml 是一个让小程序(微信/QQ)可以解析Markdown、HTML的解析库。能够使小程序完美解析Markdown内容。
默认情况下 pip 使用的是国外的镜像,在下载的时候速度非常慢,本文我们介绍使用国内源对pip进行加速。
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。