多线程学习:day3 静态代理模式

静态代理注意:真实对象和代理对象都要实现同一接口(意思是你直接创建的接口,真实和代理都要实现接口),代理对象里面必须要有真实角色(要“面向接口编程”,有target变量在“代理实现接口类之中”。

静态代理的好处:1——代理对象可以实现很多真实对象做不了的事情

                              2——真实对象只需要做自己的事情

以下为代码案例说明(简易的模仿结婚模式):

3.1 创建一个你要实现“功能”的接口,里面写上你需要实现的功能方法

interface Marry{
    void HappyMarry();
}

3.2创建一个“真实对象”类去实现这个"功能"接口,快捷键alt+enter能快速创建这个类的执行体,打印语句代表真实角色执行逻辑

//真实角色,你去结婚
class You implements Marry{

    @Override
    public void HappyMarry() {
        System.out.println("要结婚了,超开心");
    }
}

3.3创建一个“代理角色”类实现这个“功能”接口,alt+enter快捷键实现接口的方法执行体

class WeddingCompany implements Marry{ 
@Override 
public void HappyMarry() { 

} 
}

3.4在“代理角色”类之中创建“真实角色”,alt+enter快捷键实现“真实角色”的构造方法,并在“代理角色”类的执行体中进行逻辑编程

//代理角色,帮助你去结婚
class WeddingCompany implements Marry{
    //代理谁-->真实目标角色
    private Marry target;

 public  WeddingCompany(Marry target) {
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();  //这就是真实对象
        after();
    }

    private void after() {
        System.out.println("结婚之后,收取尾款");
    }

    private void before() {
        System.out.println("结婚之前,布置现场");
    }
}

3.5 创建主类并利用lamda表达式结合“类似Runnable”接口的表达去写逻辑

public class StaticProxy {
    public static void main(String[] args) {
        //用线程去实现真实对象专注做自己的事情
        new Thread(() ->  System.out.println("我爱你")).start();  //()->为lamda简化

//        WeddingCompany weddingCompany = new WeddingCompany(new You());
//        weddingCompany.HappyMarry();

        //这个是上面两行的简化,用了"类似Runnable"接口的表达去写逻辑
        new WeddingCompany(new You()).HappyMarry();  


    }

}

 结果分析:

很明显的结果就是每次第一次执行都是主类先执行,然后执行”代理角色”帮忙的动作,由此我们可以知道,静态代理可以让“真实角色”被解放出来,可以很多,同时代码的编写也是“面向接口编程”,简化不少。

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值