• java--01--静态代理


    1. 代理模式
    1.1 概述
     代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。
    举例:明星(苍老师)<---精济人<-------用户  
            目标           (代理)
    
     
    
    代理模式的关键点: 代理对象与目标对象。
    
    
    1.2 静态代理
    静态代理,
        1) 代理对象,要实现与目标对象一样的接口;
        2) 举例:
                保存用户(模拟)
                    Dao  ,  直接保存
                    DaoProxy, 给保存方法添加事务处理
    
    总结静态代理:
        1)可以做到在不修改目标对象的功能前提下,对目标对象功能扩展。
        2)缺点:
            --》  因为代理对象,需要与目标对象实现一样的接口。所以会有很多代理类,类太多。
            --》  一旦接口增加方法,目标对象与代理对象都要维护。
    
    解决:
        代理工厂?  可以使用动态代理。
    

      接口:(跳舞, 还是唱歌?)

    1 public interface IUserDao {
    2 
    3     void save();
    4     
    5     void update();
    6 }
    View Code

    目标对象把活全干完,唱歌跳舞都必须要干

     1 // 目标对象
     2 public class UserDao implements IUserDao{
     3 
     4     @Override
     5     public void save() {
     6         System.out.println("目标对象,插入数据到DB中...");
     7     }
     8 
     9     @Override
    10     public void update() {
    11         System.out.println("目标对象, 修改数据...");
    12         
    13     }
    14 
    15 }
    View Code

    代理对象向外宣称苍老师会唱歌会跳舞

     1 // 代理对象, 代理谁? 把目标对象拿进来初始化
     2 public class UserDaoProxy implements IUserDao{
     3 
     4     private IUserDao userDao;
     5     public UserDaoProxy(IUserDao userDao){
     6         this.userDao = userDao;
     7     }
     8     
     9     @Override
    10     public void save() {
    11         System.out.println("代理对象, 开启事务");
    12         userDao.save();//目标对象
    13         System.out.println("代理对象, 提交事务");
    14         
    15     }
    16 
    17     @Override
    18     public void update() {
    19         System.out.println("代理对象, 开启事务");
    20         userDao.update();//目标对象
    21         System.out.println("代理对象, 提交事务");
    22     }
    23     
    24 
    25 }
    View Code

    来吧...

     1 public class ProxyTest {
     2 
     3     public static void main(String[] args) {
     4         //1.静态代理
     5 /*        IUserDao target = new UserDao();
     6         IUserDao proxy = new UserDaoProxy(target);
     7         proxy.save();
     8         proxy.update();
     9         */
    10         /*
    11         代理对象, 开启事务
    12         目标对象,插入数据到DB中...
    13         代理对象, 提交事务
    14                 
    15         开启事务
    16         目标对象, 修改数据...
    17         提交事务
    18          */
    19         
    20         //2.动态代理
    21         IUserDao target = new UserDao();
    22         IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance();
    23         proxy.save();
    24         proxy.update();
    25         /*
    26          开启事务
    27         目标对象,插入数据到DB中...
    28         提交事务
    29         
    30         开启事务
    31         目标对象, 修改数据...
    32         提交事务
    33          */
    34     }
    35 }
    View Code
  • 相关阅读:
    SerializationUtility
    ExtendHelper
    AutoTransformHandler
    Parameter Config
    Tools Function
    谈谈对C#中反射的一些理解和认识(上)
    WPF程序中App.Config文件的读与写
    WPF实现Windows资源管理器(附源码)
    安装VC++2015运行库时出现0x80240037错误
    对C#调用C++的dll的一点思考
  • 原文地址:https://www.cnblogs.com/bravolove/p/8179848.html
Copyright © 2020-2023  润新知