唐宋元明清 唐宋元明清
首页
  • 基础

    • Java基础
  • 工具

    • hutool
    • commons
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
  • Hadoop

    • Hadoop分布式搭建
    • Hadoop高可用搭建
    • 集群端口
    • 代码demo
  • Zookeeper

    • Zookeeper集群搭建
  • Hive

    • Hive集群搭建
    • Hive相关
    • HSQL
  • Kafka

    • Kafka集群搭建
  • HBase

    • HBase集群搭建
    • HBase基础学习
  • Spark

    • Spark环境搭建
    • Spark相关知识
  • Flink

    • Flink环境搭建
    • Flink学习
  • Flume

    • Flume安装配置
    • Flume高可用集群安装
    • Flume相关学习
  • Sqoop

    • Sqoop安装配置
    • Sqoop使用
  • 其他

    • docker
  • Oracle

    • Oracle相关知识杂记
    • 系统函数篇
    • 与MySQL语法区别
  • MySQL

    • MySQL知识点
  • Python

    • Python简单语法
    • Python操作Office
    • Python类库学习
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 调度

    • 调度工具
  • 前端

    • 前端相关
  • 杂记

    • 常用工具或网站
    • 琐碎知识
  • 摘录

    • 摘录
GitHub (opens new window)
首页
  • 基础

    • Java基础
  • 工具

    • hutool
    • commons
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
  • Hadoop

    • Hadoop分布式搭建
    • Hadoop高可用搭建
    • 集群端口
    • 代码demo
  • Zookeeper

    • Zookeeper集群搭建
  • Hive

    • Hive集群搭建
    • Hive相关
    • HSQL
  • Kafka

    • Kafka集群搭建
  • HBase

    • HBase集群搭建
    • HBase基础学习
  • Spark

    • Spark环境搭建
    • Spark相关知识
  • Flink

    • Flink环境搭建
    • Flink学习
  • Flume

    • Flume安装配置
    • Flume高可用集群安装
    • Flume相关学习
  • Sqoop

    • Sqoop安装配置
    • Sqoop使用
  • 其他

    • docker
  • Oracle

    • Oracle相关知识杂记
    • 系统函数篇
    • 与MySQL语法区别
  • MySQL

    • MySQL知识点
  • Python

    • Python简单语法
    • Python操作Office
    • Python类库学习
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 调度

    • 调度工具
  • 前端

    • 前端相关
  • 杂记

    • 常用工具或网站
    • 琐碎知识
  • 摘录

    • 摘录
GitHub (opens new window)
  • Java相关知识
  • 基础

    • Java基础
    • Java扩展
  • 工具

    • hutool工具包
    • Commons类库
    • SQL解析工具
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
    • 策略模式
    • 观察者模式
    • 装饰者模式
    • 工厂模式
    • 单例模式
    • 命令模式
    • 适配器模式与外观模式
    • 模板方法模式
    • 迭代器与组合模式
    • State 模式
    • 代理模式
      • 代理模式(Proxy Pattern)
        • 定义
        • 提出问题
        • 测试 RMI
        • GumballMachine 远程代理
  • Java相关
  • 设计模式
Ai
2022-08-16
目录

代理模式

# 代理模式(Proxy Pattern)

# 定义

代理模式 为另一个对象提供一个替身或占位符以控制对这个对象的访问。

# 提出问题

书接上回,我们实现的糖果机已经可以正常工作了。现在我们想使糖果机获得更好的监控,创建一份能打印出来的报告。

# 测试 RMI


代理模式 (opens new window)


    /** 步骤一、制作远程接口
     * 1. 继承 Remote
     * 2. 所有方法都会抛出 RemoteException 异常
     * 3. 变量和返回值是元语(primitive)或者序列化(Serializable)的,因为需要进行网络 IO
     */
    public interface MyRemote extends Remote {
        public String sayHello() throws RemoteException;
    }
    
    /**
     * 步骤二、制作远程实现
     * 1. 实现远程接口 xxxRemote
     * 2. 继承 UnicastRemoteObject(使对象继承超类的远程功能)
     * 3. 创建无参构造器,并抛出异常
     * 4. 用 RMI Registry 注册此服务
     *
     *
     * 步骤三、产生 Stub 和 Skeleton(`rmic 包名.MyRemoteImpl`)
     * 步骤四、执行 remiregistry(保证启动目录可以访问类,最简单做法 classes 下启动)(`rmiregistry`)
     * 步骤五、启动服务(`java 包名.MyRemoteImpl`)
     */
    public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
        protected MyRemoteImpl() throws RemoteException {}
    
        @Override
        public String sayHello() throws RemoteException {
            return "Hello World!!!!!!!!!!!!!!";
        }
    
        public static void main(String[] args) {
            try {
                MyRemoteImpl service = new MyRemoteImpl();
                // 先保证 RMI Registry 正在运行,然后注册服务(stub)
                Naming.bind("RemoteHello", service);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    public class MyRemoteClient {
        public void go() {
            try {
                MyRemote serivce = (MyRemote) Naming.lookup("rmi://127.0.0.1/RemoteHello");
                String s = serivce.sayHello();
                System.out.println(s);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            new MyRemoteClient().go();
        }
    }
    
    // Make sure to add code blocks to your code group

    # GumballMachine 远程代理

    编辑 (opens new window)
    上次更新: 2022/09/27, 16:57:46
    State 模式

    ← State 模式

    Theme by Vdoing | Copyright © 2022-2025 Ai | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×