Java------多线程静态代理模式

静态代理

引言

在学习多线程的过程中,有必要学习下静态代理模式,因为在创建线程的几种方式,其中之的方式就是实现Runnable接口,这其实就是使用到了我们的静态代理模式。当然在现实生活中,也存在很多代理的场景,例如房产中介,婚礼策划等,都扮演者代理者的角色


实现

静态代理的实现一般可分为如下几个环节:

  1. 存在或定义一个主题接口Subject(包含一个业务方法:例如卖房子)
  2. 创建代理类(主角的狗腿子),实现主体接口Subject
  3. 创建真实对象(主角),继承主题接口Subject,实现业务方法
  4. 代理类持有真实主体对象类的引用(核心)
  5. 从代理类实现主题接口Subject的方法,并委托给引用的真实主题对象处理

代码实例:

1.定义主题接口

/*
======真实对象和代理对象需要实现的接口======
 */
interface Subject{
    void sellHourse();
}

2.定义真实对象(主角)

/*
真实角色(主角)
 */
class Mr implements Subject{
    @Override
    public void sellHourse() {
    	//真实对象(我)的sellHourse方法
        System.out.println("我是真实卖家,很高兴通过中介卖掉了房子");
    }
}

3.定义代理类(主角的小弟)

/*
小弟要帮助主角完成目标
 */
class Mp implements Subject{
	//真实对象(我)
    private Subject realSale;
	
	//构造方法
    public Mp(Subject realSale) {
        this.realSale = realSale;
    }

    @Override
    public void sellHourse() {
        defore();
        //调用真实对象(我)的sellHourse方法
        this.realSale.sellHourse();
        after();
    }

    private void defore() {
        System.out.println("我是中介,很高兴能够帮卖家卖房子......");
    }
    private void after() {
        System.out.println("我是中介,很高兴能帮卖家把房子卖出去,并收到提成");
    }
}

4.测试主类

public class Main {
    public static void main(String[] args) {
/*
使用Lamda表达式:
实例化代理(中介),将真实对象传入(我),然后再调用真实对象的sellHourse方法
Mr mr = new Mr();
Mp mp = new Mp(mr);
mp.sellHourse();
上面代码等于:new MP(new Mr()).sellHourse();
*/
        Mp mp = new Mp(new Mr());
        mp.sellHourse();
        System.out.println("======上下两种方法都可打印======");
        Subject mr = new Mr();
        new Mp(mr).sellHourse();
    }
}
  • 运行看结果:
我是中介,很高兴能够帮卖家卖房子......
我是真实卖家,很高兴通过中介卖掉了房子
我是中介,很高兴能帮卖家把房子卖出去,并收到提成
======上下两种方法都可打印======
我是中介,很高兴能够帮卖家卖房子......
我是真实卖家,很高兴通过中介卖掉了房子
我是中介,很高兴能帮卖家把房子卖出去,并收到提成

小结

静态代理模式总结:

  1. 真实对象和代理对象都要实现同一个接口
  2. 代理对象要代理真实角色

静态代理的好处:

  1. 代理对象可以做很多真实对象做不了的事情
  2. 真实对象只需要专注做自己的事情
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值