0
点赞
收藏
分享

微信扫一扫

JAVA中的代理模式(静态代理)

小禹说财 2022-04-02 阅读 56
代理模式

JAVA中的静态代理模式

代理模式就是为其他对象提供一种代理以控制对这个对象的访问;在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

简单理解:中介都知道吧,你想买房子,但是你没时间去找房子,你得上班;但是你找了中介,中介帮你去找房子,找到房子之后,你可以去看房子,看看房子有那些电器。画图表示一下。

在这里插入图片描述
因为 我找了中介的原因,所以我和中介都有一个目的,那就是找房子:房子找到了,是中介(代理类)帮我找到的,我(被代理类)自己本身并没有找,但是我可以在找房子这件事中穿插其他的事:比如吃饭(eat)、散步(walk);

把找房子抽象出来,变成一个接口,

声明一个SearchRoomInterface 接口来表示找房子的目的:
在这里插入图片描述
声明一个中介类,让中介类实现SearchRoomInterface接口,完成找房子的动作:
在这里插入图片描述
声明一个Me类,也要实现SearchRoomInterface的接口,这里的重点事想办法使用中介找房子的方法,把找房子这个事暴露出来,让中介去完成业务

在这里插入图片描述
重点在在这里:

    private SearchRoomInterface searchRoomInterface;

    //构造器的形参列别为Agency类型的参数
    public Me(Agency agency) {
        //把中介类的agency对象赋值给了 SearchRoomInterface
        //因为 Agency 类实现了接口,通过赋值,那么searchRoomInterface就是 Agency类的对象,可以调用Agency的方法
        this.searchRoomInterface = agency;
    }

最后实现效果:
在这里插入图片描述
在这里插入图片描述
我们就实现了自己虽然也是想找房子,但是通过代理的方式,让中介去找,把这个业务让中介类去完成。
全部代码:

/*
把找房子的动作抽象成一个接口
 */
public interface SearchRoomInterface {
    void searchRoom();
}

/*
声明一下中介这个类,
要找房子所以要实现接口
 */
class Agency implements SearchRoomInterface {

    @Override
    public void searchRoom() {
        System.out.println("拿到用户的请求,中介执行找房子的动作");
    }
}
/*
声明一下自己,因为也要找房子所以也要实现接口
 */

class Me implements SearchRoomInterface {

    @Override
    public void searchRoom() {
        //虽然我要找房子,但是中介已经帮我实现了,
        // 所以这里要使用到中介类中的找房子的方法
        //使用中介的找房子的方法就要存在中介Agency的对象,
        //所以我们要拿到这个对象,找房子之前我可以干点其他的,比如说吃饭,散步
        eat();
        walk();
        searchRoomInterface.searchRoom();
    }

    private SearchRoomInterface searchRoomInterface;

    //构造器的形参列别为Agency类型的参数
    public Me(Agency agency) {
        //把中介类的agency对象赋值给了 SearchRoomInterface
        //因为 Agency 类实现了接口,通过赋值,那么searchRoomInterface就是 Agency类的对象,可以调用Agency的方法
        this.searchRoomInterface = agency;
    }


    public  void eat(){
        System.out.println("找房子之前吃了点饭");
    }
    public void walk(){
        System.out.println("找房子之进行了散步");
    }
}
举报

相关推荐

0 条评论