zoukankan      html  css  js  c++  java
  • 代理模式之静态代理

    代理(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();  // 执行的是,代理的方法
        }
    }
  • 相关阅读:
    EzHttp 流传输调用代码示例
    使用EzHttp框架 开发基于HTTP协议的CS轻应用
    [转]Installing Memcached on Windows
    SQLiteServer+SQLiteClient 用于.Net项目的SQLite服务端程序和客户端类库
    ERROR: Pillow-5.2.0-cp35-cp35m-win_amd64.whl is not a supported wheel on this platform.
    Linux下的tar压缩解压缩命令详解
    scp 基于 SSH 的安全远程服务器文件拷贝
    大批量删除列表中元素的方法,自己用本办法做的
    Python 列表 pop() 方法
    可遍历的数据对象enumerate() 方法的使用
  • 原文地址:https://www.cnblogs.com/loaderman/p/10042621.html
Copyright © 2011-2022 走看看