抽象代理模式2.0版本

news/2024/10/19 9:36:21/

前言:

1.0版本的核心

代理的定义 = A proxy, in its most general form, is a class functioning as an interface to something else. The proxy could interface to anything: a network connection, a large object in memory, a file, or some other resource that is expensive or impossible to duplicate. In short, a proxy is a wrapper(封装) or agent object that is being called by the client to access the real serving object behind the scenes

The Proxy design pattern allows you to provide an interface to other objects by creating a
wrapper(封装) class as the proxy. The wrapper class, which is the proxy, can add additional
functionality to the object of interest without changing the object's code.

翻译:代理,在其最普遍的形式中,是一个作为与其他事物接口的类代理可以连接任何接口:网络连接、内存中的大型对象、文件,或者其他昂贵或难以复制的资源。简而言之,代理是客户端(主语)调用的封装器或代理对象,(目的)用于访问幕后真正的业务对象

代理设计模式允许你通过创建一个封装类作为代理,为其他对象提供接口。作为代理的封装类可以在不更改对象代码的情况下为其添加额外的功能,而无需更改对象的代码。

1.封装类

举个例子就知道了,封装了一个产品的名字

package proxy;public class wrapper {private String name;public wrapper(String name) {this.name = name;}@Overridepublic String toString() {return name;}
}

你可能觉得,封装类很像实体类,并不然,封装类其实是实体类的上一级

2.0的全新核心

单一产品

多个产品

正片:

单一产品

第一步:新建一个封装类(产品)

结构组成:私有访问变量 + 有参构造 + toStiring方法(函数)重构

第二步:新建一个业务对象(代理商)

package proxy;public class wrapperIMP {public void enter(wrapper wrapper) {System.out.println(wrapper + " 欢迎来到站长的自言自语.");}
}

结构组成:无返回值enter方法

第三步:一个封装类作为代理(代理人)

public class wrapperR extends wrapperIMP {private static final int NUM_WIZARDS_ALLOWED = 3;private int i;@Overridepublic void enter(wrapper wrapper) {if (i < NUM_WIZARDS_ALLOWED) {super.enter(wrapper);i++;} else {System.out.println(wrapper + "哈哈害!");}}
}

结构组成:继承wrapperIMP + 重构了父类的enter方法 (条件判断 )

第四步:模仿接口传入值

public class app {public static void main(String[] args) {wrapperR tower = new wrapperR();tower.enter(new wrapper("小红"));tower.enter(new wrapper("小明"));tower.enter(new wrapper("小黄"));tower.enter(new wrapper("小白"));tower.enter(new wrapper("小黑"));}
}

结构组成:new 一个代理人当成变量 + 调用代理人的enter方法

第五步运行:

发现没,代理模式中,我们的代码是全程一直走的,直到结束


http://www.ppmy.cn/news/1443360.html

相关文章

CSS_scss切换主题

目录assets/theme以下新建文件 _handle.scss import ./_themes.scss;// 定义混合指令, 切换主题,并将主题中的所有规则添加到theme-map中 mixin themify() {// 将themes中规则放入theme-mapeach $theme-name,$theme-map in $themes {$theme-map: $theme-map !global;[data-t…

4.Docker本地镜像发布至阿里云仓库、私有仓库、DockerHub

文章目录 0、镜像的生成方法1、本地镜像发布到阿里云仓库2、本地镜像发布到私有仓库3、本地镜像发布到Docker Hub仓库 Docker仓库是集中存放镜像的地方&#xff0c;分为公共仓库和私有仓库。 注册服务器是存放仓库的具体服务器&#xff0c;一个注册服务器上可以有多个仓库&…

IDEA 中的奇技淫巧

IDEA 中的奇技淫巧 书签 在使用ctrlalt方向键跳转时&#xff0c;或者追踪代码时&#xff0c;经常遇到的情况是层级太多&#xff0c;找不到代码的初始位置&#xff0c;入口。可以通过书签的形式去打上一个标记&#xff0c;后续可以直接跳转到书签位置。 标记书签&#xff1a;c…

【STM32 IIC通信与温湿度传感器AHT20(I2C_AHT20)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 最终效果展示AHT20温湿度传感器&#xff08;I2C_AHT20&#xff09; 1、工程配置2、代码如果您发现文章有错误请与我留言&#xff0c;感谢 最终效果展示 详细讲解视频…

Maven介绍 主要包括Maven的基本介绍,作用,以及对应的Maven模型,可以对Maven有一个基本的了解

1、Maven介绍 1.1 什么是Maven Maven是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 官网&#xff1a;https://maven.apache.org/ Apache 软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源软件基金会&…

C++:拷贝构造函数与赋值的区别

目录 拷贝构造函数 拷贝构造函数的使用方法 拷贝构造函数与赋值运算符的区别 谈深拷贝和浅拷贝 浅拷贝 注意: 深拷贝 拷贝构造函数 拷贝构造函数的也是一种构造函数,它的作用是将一个类的成员拷贝到另一个类中,类似于赋值。拷贝构造函数分为深拷贝和浅拷贝。 先来定义一…

Stable Diffusion教程:文生图

最近几天AI绘画没有什么大动作&#xff0c;正好有时间总结下Stable Diffusion的一些基础知识&#xff0c;今天就给大家再唠叨一下文生图这个功能&#xff0c;会详细说明其中的各个参数。 文生图是Stable Diffusion的核心功能&#xff0c;它的核心能力就是根据提示词生成相应的…

领域驱动设计:对象工厂

一、工厂概述 1.工厂与构造函数 许多面向对象语言都支持类通过构造函数创建它自己。 对象自己创建自己&#xff0c;就好像自己扯着自己的头发离开地球表面&#xff0c;完全不合情理&#xff0c;只是开发人员已经习以为常了。然而&#xff0c;构造函数差劲的表达能力与脆弱的…