Java中的静态代理设计模式

本文介绍了AOP的概念,重点讨论了Spring中的静态代理设计模式。通过租房生活案例展示了静态代理如何实现核心功能与额外功能的分离。静态代理解决了业务调用者与代码设计者之间的矛盾,但在类过载和代码冗余方面存在缺点。
摘要由CSDN通过智能技术生成

AOP(Aspect Oriented Programmimg) 面向切面编程
核心:spring中的代理设计模式
1.静态代理设计模式
service
核心:
核心功能:一定要有的功能,没有的话业务将无法进行
书写业务逻辑代码
额外功能:核心功能基础之上添加的功能(可有可无)
调用DAO
额外:
控制事务
在service层中应不应该写额外功能?
业务调用者:
service中应该有额外功能,没有额外功能,业务将面临风险
代码设计者:
service中不应该有额外功能,违反了Java中的各司其职性,额外功能经常被修改,不免影响到核心功能
矛盾:静态代理模式进行解决

生活案例:租房

房东类

package com.hp.proxy;

/**
 *  房东 出租角色
 */
public class Landlord implements Rent{
    @Override
    public void rent() {
        System.out.println("我是房东 我房屋租出");
    }
    
}

代理类 中介

package com.hp.proxy;
/**
 *  代理角色 房屋中介
 */
public class HousingAgency implements Rent{

    private Rent rent;

    public HousingAgency() {

    }

    public HousingAgency(Rent rent) {
        this.rent = rent;
    }

    @Override
    public void rent() {
        // 看房
        look();
        // 合同
        contract();
        // 收费
        moneys();
        // 转交房租
        give();
        // 成功租房
        rent.rent();
    }

    /**
     * 看房
     * @return boolean
     */
    private boolean look(){
        System.out.println("中介带房客看房,房客觉得可以");
        return true;
    }

    /**
     * 签合同
     * @return boolean
     */
    private boolean contract(){
        System.out.println("签合同,如果没有霸王条款则正常签订");
        return true;
    }

    /**
     * 交钱
     * @return boolean
     */
    private boolean moneys(){
        System.out.println("签订完合同交房租");
        return true;
    }

    /**
     * 中介将房租转给房东
     * @return 返回一张收据
     */
    private String give(){
        System.out.println("转交房租给房东");
        return "房东已收到钱";
    }
}

租房

package com.hp.proxy;

public interface Rent {
    // 出租房屋方法
    public void rent();
}

package com.hp.proxy;

/**
 * 房客 承租角色
 */
public class Tenant {
    public static void main(String[] args) {
        // 创建真实的房东对象
        Landlord landlord = new Landlord();
        // 创建代理对象并代理房东出租
        HousingAgency housingAgency = new HousingAgency(landlord);
        // 将房屋出租
        housingAgency.rent();
    }
}
静态代理中的概念:
	原始类:只负责核心功能的类
	原始方法:原始类中的方法
	代理类:给原始类添加额外功能的类
静态代理的本质:
	代理类只负责额外功能,原始类只负责核心功能,通过代理类为原始类增加额外功能
静态代理的缺点
	①类过载
		有一个原始类,就需要写一个代理类,造成类过载
	②额外功能代码冗余,不利于项目的维护
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值