【设计模式】代理模式_BLAZAR'的博客-程序员宝宝

技术标签: java  设计模式  

为其它对象提供一种代理以控制对这个对象的访问

类图

在这里插入图片描述

工程目录

在这里插入图片描述

代码

AbstractSubject.java

package com.company.pattern.demo04;

/**
 * 定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方使用Proxy
 * @author blazar
 */
public abstract class AbstractSubject {
    
    /**
     * 请求方法
     */
    public abstract void request();
}

RealSubject.java

package com.company.pattern.demo04;

/**
 * 定义Proxy所代表的真实实体
 * @author blazar
 */
public class RealSubject extends AbstractSubject{
    
    @Override
    public void request() {
    
        System.out.println("真实的请求");
    }
}

Proxy.java

package com.company.pattern.demo04;

/**
 * 保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,
 * 这样代理就可以用来替代实体
 * @author blazar
 */
public class Proxy extends AbstractSubject{
    
    private RealSubject realSubject;

    @Override
    public void request() {
    
        if(realSubject == null){
    
            realSubject = new RealSubject();
        }
        realSubject.request();
    }
}

测试类Main.java

package com.company.pattern.demo04;

/**
 * 代理模式
 * @author blazar
 */
public class Main {
    
    public static void main(String[] args) {
    
        Proxy proxy = new Proxy();
        proxy.request();
    }
}

应用场景

  1. 远程代理,为一个对象在不同的地址空间提供局部代表,这样可以隐藏这个对象存在于不同地址空间的事实;
  2. 虚拟代理;
  3. 安全代理;
  4. 智能指引;

参考《设计模式》

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42274148/article/details/119743975

智能推荐

debian9.6搭建pxe服务器+preseed,并在虚拟机上测试(完善中)_debian pxe_天泉证道的博客-程序员宝宝

首先感谢N(81855776)的帮助,跟他学到了很多。一,介绍        pxe(preboot execute envionment,预启动执行环境),很多人叫它无盘安装,就是不需要我们平时安装系统用光盘或者U盘就可以安装系统,而采用网络安装,就是用远端服务器来充当之前的盘。当然了,最重要的就是客户端(我们即将要安装系统的电脑)和服务器端(已经搭建好的pxe环境的电脑)之间的网络是通...

BZOJ 1264 AHOI2006 基因匹配Match 动态规划+树状数组_weixin_34007906的博客-程序员宝宝

题目大意:给定n个数和两个长度为n*5的序列,每一个数恰好出现5次,求两个序列的LCSn<=20000。序列长度就是10W。朴素的O(n^2)一定会超时所以我们考虑LCS的一些性质LCS的决策+1的条件是a[i]==b[j] 于是我们记录a序列中每一个数的5个位置扫一下b[i] 对于每一个b[i]找到b[i]在a中的5个位置 这5个位置的每一个f[pos]值都能够被b...

Ubuntu17.04更换阿里源_weixin_30757793的博客-程序员宝宝

命令:sudo vim /etc/apt/sources.list阿里源:deb http://mirrors.aliyun.com/ubuntu/ zesty main multiverse restricted universedeb http://mirrors.aliyun.com/ubuntu/ zesty-backports main multiverse res...

Java 笔记_栗子举一个的博客-程序员宝宝

注解元注解–>[email protected]>注解的使用范围@Retention-->注解的声明周期--source<class<[email protected]>注解包含在javadoc中 @Inherited-->子类可以继承父类中的注解自定义注解@[email protected](value = {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD

fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1)记录_豆芽炒粉丝的博客-程序员宝宝

头文件用#include <iostream.h> 但是当改成#include <iostream.h>后,会出现does not exist or is not a namespace 原因: 查了一下,原来 C++有两个不同版本的头文件。引入名字空间这个概念以前编译器用的是#include <iostream.h>, 而引入名字空间的概念以后std名字空间的头文件名字变成了<iostrea

neo4j 在centos 中的安装_centos8部署neo4j_pjiang000的博客-程序员宝宝

这篇教程完美https://my.oschina.net/edwardge/blog/1632206

随便推点

利用nginx实现反向代理 解决前后端分离中 跨域问题_前后端分离,使用nginx,@crossorigin还是会跨域_darkWatch的博客-程序员宝宝

最近的项目使用springboot+react架构实现的,是前后端完全分离的,在联调的时候遇到跨域问题。现在项目中,使用前后端分离架构的越来越多,但是前后端分离联调的时候会存在跨域的问题。当然如果只是为了访问,可以添加@CrossOrigin 注解来解决,但是如果在项目中使用的有cookie,那就不行了,因为cookie只能在一个域中使用。Nginx是一个高性能的HTTP和反向代理w...

慕课网编程学习_编程网课_Fhang1996的博客-程序员宝宝

慕课网邀请码慕课网是个学编程的好地方,推荐大家针对某个编程语言,去学习。从初级到高阶的视频教学都有。https://s.imooc.com/AUMCX6i点击上面链接进行购买有优惠哦。...

java.net.UnknownHostException: api.weixin.qq.com解决办法_cn.hutool.core.io.ioruntimeexception: unknownhoste_xq30397022的博客-程序员宝宝

java.net.UnknownHostException: api.weixin.qq.comat java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:175)at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)at java.

linux脚本判断流程控制,shell条件判断和流程控制语句If_一如原来的博客-程序员宝宝

shell条件判断和流程控制语句If2019.05.31 15:59* 字数 1230 阅读 1评论 0喜欢 01、read 命令键盘读取变量的值从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合,此命令可以一次性读取多个值,变量和输入值都需要使用空格隔开,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLYread命令参数read 命令-s  将输入的字符隐藏起来-p ...

cadence学习笔记(5)-从其他PCB(AD、PADS)导出Allegro使用的封装库_allegro导入asc文件_饼里个饼的博客-程序员宝宝

一、AD转Allegro封装库1. AD转ASCLL文件2.一定要选择ASCLL文件3.打开Allegro软件导入刚刚生成的PCB文件4.转化完成的PCBAD原PCB5.导出AllegroPCB封装库6.生成的封装库文件二、PADS转Allegro封装库1.打开PADS PCB文件,导出ASCLL文件入打开allegro软件,导入生成的.asc文件完成后点击Translate点击OK后会生成一个brd文件,之后用Allegro打开这个文件按照上面

SpringBoot教程(4) @ComponentScan excludeFilters 自定义过滤器_国服亚瑟的博客-程序员宝宝

一、@ComponentScan的作用@ComponentScan用于类或接口上,主要是指定扫描路径并把带有指定注解的类注册到Spring容器中。会被自动装配的注解包括@Component、@Bean、@Controller、@Service、@Repository等等。二、定义组件1. @Service注解的类MyService类被扫描后,会生成名为myBeanService的实例package info.pigg.study.java.service;import org.sprin

推荐文章

热门文章

相关标签