代理模式之静态代理

代理模式简单来说就是:我们使用代理对象来代替对真实对象的访问,在不修改原目标对象代码的情况下,提供额外的功能操作,扩展目标对象的功能。

代理模式的主要功能就是:扩展目标对象的功能,增强目标对象的某个方法,比如在某个方法执行前增加日志操作等等。

静态代理中,我们对目标对象的每个方法的增强都是手动完成的(后面会具体演示代码),非常不灵活(比如接口一旦新增加方法,目标对象和代理对象都要进行修改)且麻烦(需要对每个目标类都单独写一个代理类)。实际应用场景非常非常少,日常开发几乎看不到使用静态代理的场景。

静态代理创建步骤:

1.定义一个接口及其实现类

2.创建一个代理类同样实现这个接口

3.将目标对象注注入进代理类,然后在代理类的对应方法调用目标类中的对应方法。这样的话,我们就可以通过代理类屏蔽对目标对象的访问,并且可以在目标方法执行前后做一些自己想做的事情。

创建一个租房的接口

public interface Rent {
public void rent();
}

再创建一个房东的类,并且实现这个接口

//房东
public class Host implements Rent {
    @Override
    public void rent() {
        System.out.println("房东出租了房子");
    }
}

创建一个中介的类,并且也实现这个接口

public class proxy {
    private  Rent rent;

    public proxy(Rent rent) {
        this.rent = rent;
    }

    private void getRent(Rent rent){
        this.rent=rent;
    }

    public void rent() {
        System.out.println("带你看房子");
        rent.rent();
        System.out.println("签合同");
        System.out.println("拿佣金");
    }
}

一个人想要租房,但是他不直接找房东,去找房东的代理人房屋中介,并且中介在原来的租房这一事物上,加了一些其他的东西,比如带你看房,收取佣金,

public class client {
    public static void main(String[] args) {
        Host host = new Host();
        proxy proxy = new proxy(host);
        proxy.rent();
    }
}

代理模式之静态代理_第1张图片

静态代理

优缺:在不修改目标对象的前提下,可以通过代理对象对目标对象功能扩展

缺点:理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。

你可能感兴趣的:(设计模式,代理模式)