Monkey 平 Monkey 平
首页
  • JAVA知识点
  • Docker
  • Linux
友情链接
关于
GitHub (opens new window)

Evan Xu

前端界的小学生
首页
  • JAVA知识点
  • Docker
  • Linux
友情链接
关于
GitHub (opens new window)
  • 设计模式

    • JAVA设计模式-单例模式
    • JAVA设计模式-工厂模式
    • JAVA设计模式-建造者模式
    • JAVA设计模式-原型模式
    • JAVA设计模式-适配器模式
    • JAVA设计模式-装饰模式
    • JAVA设计模式-外观模式
    • JAVA设计模式-代理模式
      • JAVA设计模式-代理模式
        • 一、介绍
        • 二、相关角色
        • 三、类图
        • 四、代码实现
        • Subject
        • RealSubject
        • ProxySubject
        • Client
    • JAVA设计模式-桥接模式
  • JAVA知识点
  • 设计模式
Monkey 平
2022-10-18
目录

JAVA设计模式-代理模式

# 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();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 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("厂家拿货,进行售卖");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 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("包安装、售后");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 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();
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
编辑 (opens new window)
上次更新: 2023/02/26, 10:03:01
JAVA设计模式-外观模式
JAVA设计模式-桥接模式

← JAVA设计模式-外观模式 JAVA设计模式-桥接模式→

最近更新
01
Linux文件夹权限操作
10-30
02
Linux基础知识一
10-25
03
JAVA设计模式-桥接模式
10-18
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式