【Java】静态代理模式

※ 静态代理模式

  • 先定义一个接口;
  • 真实对象和代理对象都要实现同一个接口;
  • 代理对象要代理真实对象
  • (就是将真实对象作为参数传入代理对象的构造方法)
    • 代理对象可以做很多真实对象做不了的事;
    • 真实对象可以专注做自己的事;

定义一个宠物类为真实对象,而主人类是代理对象,用主人类代理宠物类的方法:

public class StaticProxy {
    public static void main(String[] args) {
        Master master = new Master(new Pet());
        master.play();
    }
}

interface Happy{
    //接口定义一个“玩”方法
    void play();
}

//真实角色 宠物
class Pet implements Happy{
    @Override
    public void play() {
        System.out.println("拼命拼命耍");
    }
}

//代理角色 宠物的主人
class Master implements Happy{
    //代理谁(代理的真实角色)
    private Happy who;
    public Master(Happy who){
        this.who = who;//真实对象
    }
    private void before() {
        System.out.println("带狗出门");
    }
    private void after() {
        System.out.println("回家给狗洗澡");
    }
    
    @Override
    public void play() {
        before();
        this.who.play();
        after();
    }
}
/*
输出:
	带狗出门
	拼命拼命耍
	回家给狗洗澡
/*

对于 多线程 的应用:

//创建一个Thread 静态代理Runnable接口
new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("今天去哪里玩了呀")
            }
        }).start();
        
等同于如下:(使用lambda表达式)
//使用lambda表达式
new Thread(()-> System.out.println("今天去哪里玩了呀")).start();

1.Thread是代理角色;
2.Runnable接口是真实角色;
3.Thread也实现Runnable接口;
3.所以Thread代理Runnable接口实现方法start();

new Thread(()-> System.out.println("今天去哪里玩了呀")).start();

相当于:

new Master(new Pet()).play();

 ThreadMaster 都是代理对象
RunnablePet 是真实对象

不懂Lambda表达式的可以看—>【Java】Lambda表达式的魅力


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苗半里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值