• 代理模式之静态代理


    代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。

    代理模式的关键点: 代理对象与目标对象。

    静态代理

    静态代理,

             1) 代理对象,要实现与目标对象一样的接口;

             2) 举例:

                                保存用户(模拟)

                                         Dao  ,  直接保存

                                         DaoProxy, 给保存方法添加事务处理

    总结静态代理:

             1)可以做到在不修改目标对象的功能前提下,对目标对象功能扩展。

             2)缺点:

                       --》  因为代理对象,需要与目标对象实现一样的接口。所以会有很多代理类,类太多。

                       --》  一旦接口增加方法,目标对象与代理对象都要维护。

    解决:

             代理工厂?  可以使用动态代理。


    package loaderman.a_static;
    
    // 接口
    public interface IUserDao {
    
        void save();
    }
    package loaderman.a_static;
    /**
     * 目标对象
     * @author Jie.Yuan
     */
    public class UserDao implements IUserDao{
    
        @Override
        public void save() {
            System.out.println("-----已经保存数据!!!------");
        }
    }
    package loaderman.a_static;
    /**
     * 代理对象(静态代理)
     *        代理对象,要实现与目标对象一样的接口
     * @author Jie.Yuan
     *
     */
    public class UserDaoProxy implements IUserDao{
        // 接收保存目标对象
        private IUserDao target;
        public UserDaoProxy(IUserDao target) {
            this.target = target;
        }
        @Override
        public void save() {
            System.out.println("开始事务...");
    
            target.save();             // 执行目标对象的方法
    
            System.out.println("提交事务...");
        }
    }
    package loaderman.a_static;
    public class App {
        public static void main(String[] args) {
            // 目标对象
            IUserDao target = new UserDao();
            // 代理
            IUserDao proxy = new UserDaoProxy(target);
            proxy.save();  // 执行的是,代理的方法
        }
    }
  • 相关阅读:
    概述和HTTP请求 和 响应处理
    编写一个函数,在页面上输出一个N行M列的表格,表格内容填充1~100的随机数字
    js简介及js基本数据类型
    浅谈 Java线程状态转换及控制
    浅谈 Java多线程
    浅谈 ArrayList 及其扩容机制
    Java 中 static 的作用
    合并两个有序数组
    贪心算法——换酒问题
    查找——二分查找
  • 原文地址:https://www.cnblogs.com/loaderman/p/10042621.html
Copyright © 2020-2023  润新知