首页 > 编程语言 >JAVA设计模式-代理模式

JAVA设计模式-代理模式

时间:2022-10-19 23:00:34浏览次数:75  
标签:xpyvip 对象 代理 空调 JAVA 设计模式 public 售卖

JAVA设计模式-代理模式

一、介绍

代理模式是一种结构型模式,它指的是给某一个对象提供一个代理对象,并且由代理对象控制原有对象的引用,可以增强原有对象的功能以及降低系统的耦合度。生活中例如某品牌的代理商,我们买东西通过代理商购买,不是和厂家直接购买。代理模式有静态代理和动态代理,例如,我们使用线程时实现的Runnable接口是使用的静态代理,Spring中的AOP是使用的的动态代理。

二、相关角色

  1. Subject: 抽象角色,一般是使用的是接口或者抽象类,里面定义了代理对象和被代理对象共同的接口。
  2. Porxy: 代理对象,会实现或者继承抽象角色,并且会实现抽象角色中的接口,还会包含对被代理对象的引用,其中在实现抽象角色中接口时,可以增加其他操作,增强功能。
  3. RealSubject: 真实对象,也就是被代理的对象,该对象也会实现抽象角色中的接口。
  4. Client:客户端,调用代理对象。

三、类图

image-20221015213642948

四、代码实现

我们就使用空调代理商来简单说明并实现代理模式,首先厂家是可以直接拿货售卖空调,代理商也是可以售卖空调,但是代理商售卖空调,有优惠、可以打折,售卖之后,包安装等,代理商售卖空调也是从厂家拿货售卖空调。

Subject

/**
 * All rights Reserved, Designed By monkey.blog.xpyvip.top
 *
 * @version V1.0
 * @Package com.xpyvip.designpattern.proxy
 * @Description: 抽象接口
 * @Author: xpy
 * @Date: Created in 2022年10月15日 9:38 下午
 */
public interface Subject {
    /**
     * 售卖空调操作
     */
    void action();
}

RealSubject

/**
 * All rights Reserved, Designed By monkey.blog.xpyvip.top
 *
 * @version V1.0
 * @Package com.xpyvip.designpattern.proxy
 * @Description: 真实对象
 * @Author: xpy
 * @Date: Created in 2022年10月15日 9:42 下午
 */
public class RealSubject implements Subject{

    /**
     * 模拟空调厂家售卖
     */
    public void action() {
        System.out.println("厂家拿货,进行售卖");
    }
}

ProxySubject

/**
 * All rights Reserved, Designed By monkey.blog.xpyvip.top
 *
 * @version V1.0
 * @Package com.xpyvip.designpattern.proxy
 * @Description: 代理对象
 * @Author: xpy
 * @Date: Created in 2022年10月15日 9:44 下午
 */
public class ProxySubject implements Subject{
    /**
     * 厂家,被代理对象
     */
    private RealSubject realSubject;

    public ProxySubject() {
        System.out.println("这个是代理类,空调代理商");
        this.realSubject = new RealSubject();
    }

    /**
     * 售卖空调
     */
    public void action() {
        // 增强功能
        // 售卖空调前操作
        System.out.println("谈价格、给优惠、打折。。。");
        // 厂家拿货,售卖空调
        this.realSubject.action();
        // 售卖空调后操作
        System.out.println("包安装、售后");
    }
}

Client

/**
 * All rights Reserved, Designed By monkey.blog.xpyvip.top
 *
 * @version V1.0
 * @Package com.xpyvip.designpattern.proxy
 * @Description: 客户端
 * @Author: xpy
 * @Date: Created in 2022年10月15日 9:48 下午
 */
public class Client {
    public static void main(String[] args) {
        Subject subject = new ProxySubject();
        subject.action();
    }
}

原文链接:https://monkey.blog.xpyvip.top/archives/java-she-ji-mo-shi---dai-li-mo-shi

标签:xpyvip,对象,代理,空调,JAVA,设计模式,public,售卖
From: https://www.cnblogs.com/aibianchengya/p/16804659.html

相关文章

  • JavaScript学习--String对象,自定义对象,window对象
    String对象定义:var变量名=newString(s);varstr=newString("hello");var变量名=s;           varstr="hello";属性:length字符串长度方法:c......
  • JavaWeb项目编译前后的目录结构
    JavaWeb项目编译前后的目录结构编译前页面和视图都放在webapp目录下编译后webappsWEB-INF......
  • Java I/O(2):NIO中的Channel
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~为了解决标准JavaI/O令人难以忍受的效率问题,从JDK1.4开始,NIO出现了(Non-blockingI/O,官方称之为NewI/O)。NIO不但新增加了......
  • 【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了
    @[Toc]1会话1.1什么是会话?用户打开浏览器,访问Web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。1.2会话跟踪一种维护浏览器状......
  • 小新学Java2
    一、方法1.方法有返回值和无返回值的区别 2.使用方法时的注意事项①方法应该定义在类中,但是不能在方法中再定义方法。不能嵌套。②方法定义的前后顺序无无所谓。③......
  • 力扣525(java&python)-连续数组(中等)
    题目:给定一个二进制数组nums,找到含有相同数量的0和1的最长连续子数组,并返回该子数组的长度。 示例1:输入:nums=[0,1]输出:2说明:[0,1]是具有相同数量......
  • Javascript中的反射机制(五)
    一:什么是反射机制反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。二:在JavaScript中利用for(…in…)语句实现......
  • Javascript事件设计模式(七)
    一:事件设计概述事件机制可以使程序逻辑更加符合现实世界,在JavaScript中很多对象都有自己的事件,例如按钮就有onclick事件,下拉列表框就有onchange事件,通过这些事件可......
  • Jenkins 创建节点 java-web方式
                    登陆节点机器,下载jar包[root@bogon~]#wgethttp://192.168.228.147:8081/jnlpJars/agent.jar    ......
  • Java调试排错心得
      首先这里没有报错,但是打印了四行相同的数据,还都是最后一行的数据。然后调试了一下这里是重点:  下面哪里account={Account@1580}是一直用的一个对象,所有每一次......