java设计模式:代理模式

什么是代理模式?

  对于一个类的方法的调用,不直接通过该类的对象来调用方法,程序里有一个专门的代理类,通过调用代理类的方法来实现真实类内部方法的调用。

  特征是:代理类和委托类有同样的接口,代理类主要负责为委托类预处理信息、过滤信息、把信息转发给委托类、以及时候处理信息等。代理类对象类本身并不真正实现服务,而是通过调用委托类的相关对象的方法,来提供特定的服务。

代理分为静态代理和动态代理

静态代理:

/**
 * 1.创建接口
 */
public interface IUserAccount {
    void getMoney(double money);

    void search();
}
/**
 * 创建接口实现类
 */
public class Useroperaton implements IUserAccount{
    @Override
    public void getMoney(double money) {
        System.out.println("小明用户取了"+money+"元");
    }


    public void getTrueMoney(double money, Date date) {
        System.out.println("小明用户取了"+money+"元,取钱的时间为:"+date);
    }
    @Override
    public void search() {
        System.out.println("小明查询了账户余额");
    }
}
/**
 * 代理类要实现代理对象的接口
 */
public class ProtyDemo implements IUserAccount {
    private Useroperaton useroperaton = null;//被代理类对象

    public ProtyDemo(Useroperaton useroperaton) {
        this.useroperaton = useroperaton;
    }

    public void getMoney(double money) {
        System.out.println("代理真实方法执行前,切入的代码执行了");
        useroperaton.getTrueMoney(1000,new Date());
        System.out.println("代理真实方法执行后,切入日志保存代码");
    }

    @Override
    public void search() {
        useroperaton.search();
    }
}
/**
 * 测试方法
 */
public class Demo {
    public static void main(String[] args) {
        ProtyDemo protyDemo = new ProtyDemo(new Useroperaton());
        protyDemo.getMoney(1000);
    }
}
/**
* 代理模式的优点:
* 1.可以隐藏代码的真实方法,代码的实现更安全
* 2.可以在代理类集中的切入某些代码,如日志的切入
* 缺点:
* 1.由于在客户端和真是主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
* 2.实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
*/

猜你喜欢

转载自www.cnblogs.com/Zs-book1/p/11141934.html
今日推荐