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

    1. 代理: 中介

    2. 通过程序来实现租房功能。分析下在租房的过程中,有哪些对象:

    • 房东
    • 中介
    • 房客

      中介代理房东进行租房的功能,所以中介和房东具有相同的功能。为了保证中介和房东具有相同的功能,那么中介和房东需要实现相同的接口。

    • 抽象的角色。

    代码的实现:Rent.java

    /**
     * 
     * 租房接口
     */
    public interface Rent {
        //租房
        public void rent();
    }

    Host.java

    /**
     * 
     * @author siggy
     * @version v.10 
     */
    public class Host implements Rent{
        @Override
        public void rent() {
            System.out.println("房东租房");
        }
    }

    Proxy.java

    /**
     * 中介
     */
    public class Proxy implements Rent{
        private Host host;
        public Proxy(Host host) {
            super();
            this.host = host;
        }
        @Override
        public void rent() {
            fare();
            host.rent();
            maintance();
        }
        private void fare(){
            System.out.println("收取中介费");
        }
        private void maintance(){
            System.out.println("维护");
        }
    }

    Client.java

    public class Client {
        public static void main(String[] args) {
            Host host = new Host();
            Proxy proxy = new Proxy(host);
            proxy.rent();
        }
    }

    以上代码就是静态代理的实现。通过上述案例可以知道:

    3. 静态代理是由4哥角色组成的:

    • 抽象角色
    • 真实角色
    • 代理角色
    • 调用角色

    类图:

    4. 将静态代理应用到项目中:

    公共的业务:Log.java

    public class Log {
        public static void log() {
            System.out.println("日志:类,方法, 参数");
        }
    }

    UserService.java

    public interface UserService {
        public void save();
        public void update();
        public void delete();
        public void get();
    }

    UserServiceImpl.java

    public class UserServiceImpl implements UserService{
        /**
         * 在每次实现业务方法时 需要增加一些公共的功能。
         * 如:日志,缓存,安全检查,事务等
         */
        public void save() {
            System.out.println("保存用户");
        }
    
        @Override
        public void update() {
            System.out.println("更新用户");
        }
    
        @Override
        public void delete() {
            System.out.println("删除用户");
        }
    
        @Override
        public void get() {
            System.out.println("获取用户");
        }
    
    }

    UserServiceImplProxy.java

    public class UserServiceImplProxy implements UserService{
        private UserService userService;
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
        @Override
        public void save() {
            //加入公共业务
            Log.log();
            userService.save();
        }
    
        @Override
        public void update() {
            Log.log();
            userService.update();
        }
    
        @Override
        public void delete() {
            Log.log();
            userService.delete();
        }
    
        @Override
        public void get() {
            Log.log();
            userService.get();
        }
    
    }

    5. 通过上述案例可知,静态代理:

      优点:  

    • 将公共业务和真实业务分离,实现解耦动作。
    • 方便了分工,做公共业务的人,专门处理公共业务,做领域业务的人做领域业务。利于维护

      缺点:代码量增加,业务更复杂。

      

      

  • 相关阅读:
    BZOJ1093 [SCOI2003]字符串折叠
    BZOJ1078 [SCOI2008]斜堆
    BZOJ1089 [SCOI2003]严格n元树
    BZOJ1031 [JSOI2007]字符加密
    BZOJ1038 [ZJOI2008]瞭望塔
    BZOJ1037 [ZJOI2008]生日聚会Party
    BZOJ1041 [HAOI2008]圆上的整点
    BZOJ1026 [SCOI2009]windy数
    linux命令行计算器 <转>
    正则的[]与()
  • 原文地址:https://www.cnblogs.com/forever2h/p/6744197.html
Copyright © 2011-2022 走看看