首页 > 编程语言 ># Java笔记(12) 静态代理

# Java笔记(12) 静态代理

时间:2023-04-06 20:38:00浏览次数:28  
标签:12 Java Person 对象 void 代理 笔记 person public

静态代理可以在不改变原有代码的情况下,增加新的功能和操作,对原有对象进行扩展。
静态代理要求真实对象和代理对象都实现同一个接口,由代理对象代理真实角色的接口实现,并在实现前后增加新的操作。

public class StaticProxy{
  public static void main(String[] args){
    Person person = new Person("张三");
    //由代理对象代理真实对象的方法
    new WeddingCompany(person).happyMarry();
  }
}
//要实现的接口
interface Marry{ void happyMarry();}

//真实对象
class Person implements Marry{
  private String name;
  public Person(String name){this.name = name;}
  public void happyMarry(){ //实现接口
    System.out.println(this.name + " is gonna married, Happy!");
  }
}
//代理对象
class WeddingCompany implements Marry{
  private Person person;
  public void WeddingCompany(Person person){ this.person = person; }

  public void happyMarry(){//实现接口的方法
    before();  //代理过程中额外添加的操作
    person.happyMarry();  //真实对象的操作
    after();  //代理过程中额外添加的操作
  }

  public void before(){System.out.println("Before wedding, set up the scene...")}
  public void after(){System.out.println("After wedding, clean up after...");}
}

StaticProxy

在之前的笔记(11)中已经出现过静态代理了,创建多线程的方法中,提到的第一种方法是直接继承Thread类,第二种方法是实现Runnable接口,然后创建Thread类,将待执行线程作为参数传递进去,调用start()方法启动。

public static void main(String[] args) {
        TestThread testThread = new TestThread();//创建真实对象
        new Thread(testThread).start();//由代理对象代理执行
        for (int i = 0; i < 5; i++) {
            System.out.println("main 方法线程: " + i);
        }
    }

实际上这就是静态代理了,TestThread是真实对象,Thread是代理对象,二者都实现了Runnable接口,由Thread类代理执行待执行线程。
静态代理可以做很多真实对象做不了的事情,而真实对象可以专注做自己的事情。

标签:12,Java,Person,对象,void,代理,笔记,person,public
From: https://www.cnblogs.com/hiibird/p/17293761.html

相关文章

  • vue3创建项目笔记
    E:\vue3学习>npminitvite@latestvite-blog----templatevueNeedtoinstallthefollowingpackages:[email protected]?(y)yScaffoldingprojectinE:\vue3学习\vite-blog...Done.Nowrun:cdvite-blognpminstallnpmrundevnpmnotice......
  • JavaWeb-Cookie-16课-2023-04-06
    packagecom.feijian.servlet;importjavax.servlet.ServletException;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOExc......
  • SQLlabs less1-10通关笔记
    SQLlabs通关笔记mysql数据结构在练习靶场前我们需要了解以下mysql数据库结构,mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有两个表一个是tables和columns。tables这个表的table_name字段下面是所有数据库存在的表名。table_schema字段下是所......
  • java -- System类和冒泡排序
    Systemjava.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。System类私有修饰构造方法,不能创建对象,直接类名调用。exit//终止当前运行的Java虚拟机,非零表示异常终止publicstaticvoidexit(intstatus)currentTimeMillis//返回当前时间(......
  • java调用本机的命令 如ping、打开文本等
    最近接触到用java代码调用主机的命令部分感觉有点意思整理总结一下环境jdk1.8 操作系统win10,不用引入其他的包jdk自带的api就可以一、java调用ping命令importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.nio.charset.Charset;//调用本机ping......
  • LabVIEW网口TCP通讯西门子PLC,支持200、300、1200、1500、400、SMART全系列
    LabVIEW网口TCP通讯西门子PLC,支持200、300、1200、1500、400、SMART全系列PLCS7协议官方工具包,常用功能一网打尽。1.命令帧读写。程序源码,命令帧文本编写,不调用dll,不安装插件,完胜OPC等。创作不易,非诚勿扰。谢谢大家。YID:6787669089987972......
  • Java笔记(11) 多线程
    Java原生支持多线程,主要通过以下四种方式实现多线程:继承Thread类实现Runnable接口实现Callable接口线程池继承Thread类通过创建Thread类的子类,并重写run()方法,通过调用start()方法启动线程。publicclassTestThreadextendsThread{@Overridepublicvoidru......
  • java基础起步五-数组(1)
    ·数组(array):简单的说就是一组数。java中数组也是一种数据类型,相同数据类型的匀速按照一定的顺序的集合,而且是有限个类型相同的变量用一个名字来命名。比如要存储1706A班级的学员成绩,第一组有四个同学,我们可以如下定义:intscore1=80;intscore2=82;intscore3=83;ints......
  • day03-实训在线授课笔记
    文章目录课前回顾:项目正规流程:立项:初期:1)需要的服务器(物理机,虚拟机,阿里云),数据库,环境,带宽2)需求:需求分析文档(3个月)-设计(UI,产品经理-模型)-编程-测试-实施(上线)电商项目举例3)项目运维的部署方案(为了后期方便别人操作)4)发现问题:写出大致的解决方案,提交,进行上级的授权。5)优化和维护6)......
  • java基础起步三-流程控制语句中的条件语句
    文章目录流程控制语句结构:1.顺序结构2.分支结构3.循环结构分支结构语法:1.单分支结构;2.双分支结构3.多分支条件语句:选择结构语法:注意:输入输出案例练习题本节课我们学习java基础部分的流程控制语句,流程控制语句方为三种结构:顺序结构,任何程序的执行都是自上而下,从左到右的执行......