码迷,mamicode.com
首页 > 编程语言 > 详细

java--01--静态代理

时间:2018-01-03 00:45:33      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:this   通过   关键点   rda   factor   stat   目标   使用   highlight   

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

 

java--01--静态代理

标签:this   通过   关键点   rda   factor   stat   目标   使用   highlight   

原文地址:https://www.cnblogs.com/bravolove/p/8179848.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!