zoukankan      html  css  js  c++  java
  • 多线程08:深度剖析Thread类,静态代理

    静态代理:
    代理,大家应该都不陌生,就是我帮你去做一些事情。比如说,结婚。
    现在结婚,大家都去找婚庆公司,谁结婚啊,是不是你结婚啊。你结婚,但是你,你什么都不用去做,婚庆公司帮你。帮你布置现场,帮你去把所有人招过来。帮你选地址,给你布置场景,等等。反正是它帮你做的。
    最后,结婚的人是你,你就是一个真实角色。
    结婚呢,结婚是你们两都要去做的事情。
     
    用代码给大家说一下什么叫代理模式:
    思路:
    你:真实角色
    婚庆公司:代理角色,帮你处理结婚的事
    结婚:都实现结婚的接口即可

     1 package com.thread.proxystatic;
     2 
     3 public class StaticProxy {
     4     public static void main(String[] args) {
     5         //用婚庆公司去结婚,婚庆公司调用了一个方法,叫HappyMarry(),但是结婚的人是你,
     6         //并没有通过你去直接调,而是通过婚庆公司,它代理你去结婚,但是结婚的人还是你
     7         //new WeddingCompany(new You()).HappyMarry();
     8         WeddingCompany weddingCompany = new WeddingCompany(new You());
     9         weddingCompany.HappyMarry();
    10     }
    11 }
    12 
    13 interface Marry {
    14     //人间四大喜事:
    15     //久旱逢甘露,
    16     //他乡遇故知。
    17     //洞房花烛夜,
    18     //金榜题名时。
    19     public abstract void HappyMarry();
    20 }
    21 
    22 //真实角色,你去结婚
    23 class You implements Marry {
    24 
    25     @Override
    26     public void HappyMarry() {
    27         System.out.println("你要结婚了,超级开心");
    28     }
    29 }
    30 
    31 //代理角色,帮助你结婚
    32 class WeddingCompany implements Marry {
    33     //代理谁-->真实角色
    34     private Marry target;//创建一个变量,通过构造方法把真实对象传进去
    35 
    36     public WeddingCompany(Marry target) {
    37         this.target = target;
    38     }
    39 
    40     @Override
    41     public void HappyMarry() {
    42         before();
    43         this.target.HappyMarry();//这是真实对象,调用一个结婚
    44         after();
    45     }
    46 
    47     private void before() {
    48         System.out.println("结婚之前,布置婚礼现场");
    49     }
    50 
    51     private void after() {
    52         System.out.println("结婚之后,收尾款");
    53     }
    54 
    55 
    56 }
    57 
    58 结果:
    59 结婚之前,布置婚礼现场
    60 你要结婚了,超级开心
    61 结婚之后,收尾款
    静态代理总结:
    1. 真实对象(目标对象)和代理对象都要实现同一个接口
    2. 代理对象要代理真实角色,真实角色就是你
    3. 代理对象必须要有个参数,创建一个变量,通过构造方法, 把真实对象传进去
    4. 传进去后,调用HappyMarry()这个方法。
    5. 于是乎,你们就结婚了
    6. 结婚用不着你干,你只要把你交给婚庆公司,你只要花钱。
    7. 婚庆公司呢,结婚之前布置一下现场。结婚之后呢,收一下尾款。
    好处:
    1. 代理对象可以做很多真实对象做不了的事情
    2. 真实对象就专注做自己的事情
     
    静态代理对比Thread
    Thread就相当于婚庆公司,代理中间的真实的一个Runnable接口,调用了一个start(),start()是Thread类弄的,他们都有一个共同的run()
    婚庆公司WeddingCompany,代理你You,你调用了一个结婚方法HappyMarry(),结婚方法是接口中的

    1 new Thread(()-> System.out.println("我爱你")).start();
    2 new WeddingCompany(new You()).HappyMarry();
  • 相关阅读:
    C# 获取当前时间戳和将时间戳转为时间Datetime类型的方法
    Dynamics CRM 365 窗体的Lookup字段通过JS按照某个字段过滤数据
    Dynamic CRM 365 启用用户systemuser、修改用户systemuser的时候报错:The selected object could not be found. Verify that the object exists in both the database and Active Directory.
    Dynamics 365 V9.0版本后引入多选项集,SQL查询条件如何写
    Dynamics 365 V9.0版本后引入多选项集,SQL查询时,如何显示选中的选项名称
    SQLite实现Top功能
    RecyclerView滑动到指定位置
    使用Intent传递对象(两种)
    Android获取当前系统日期和时间
    jxl自动设置列宽
  • 原文地址:https://www.cnblogs.com/duanfu/p/12260491.html
Copyright © 2011-2022 走看看