源码分析设计模式之代理模式(二、静态代理模式)

一、静态代理模式

静态代理是代理类在编译期间就创建好了,不是编译器生成的代理类,而是手动创建的类。在编译时就已经将接口,被代理类,代理类等确定下来。在软件设计中所指的代理一般是指静态代理,也就是在代码中显式指定的代理

二、实现静态代理四步骤

  • 定义业务接口
  • 被代理类实现业务接口
  • 定义代理类并实现业务接口
  • 最后便可通过客户端进行调用

三、实战演练

抽象角色:出租房
interface Rent {
    
    
    void rent();
}
真实角色:房东
class HouseOwner implements Rent {
    
    
    @Override
    public void rent() {
    
    
        System.out.println("房东要出租房子");
    }
}
代理角色:中介
class Proxy implements Rent {
    
    
    private HouseOwner owner;	// 少用继承,多用组合
	
    public Proxy() {
    
    }
    
	public Proxy(HouseOwner owner) {
    
    
		this.owner = owner;
	}
	
    /**
     * 代理 真实角色 的业务方法
     */
    @Override
    public void rent() {
    
    
        seeHouse();		// 真实角色主业外的附加操作
        owner.rent();	// 真实角色的主业,主业还是由真实角色完成
        getAgreement();	// 真实角色主业外的附加操作
    }

    /**
     * 看房
     */
    public void seeHouse() {
    
    
        System.out.println("中介带你看房");
    }
	
	/**
     * 签合同
     */
    public void getAgreement() {
    
    
        System.out.println("签租赁合同");
    }
}

public class Client {
    
    
    public static void main(String[] args) {
    
    
    	HouseOwner owner = new HouseOwner();	// 房东要出租房子
    	Proxy proxy = new Proxy(owner);	// 代理,中介帮房东处租房子,但是代理一般会有一些附属操作
    	proxy.rent();	// 你不用面对房东,直接找中介租房即可
    }
}

四、静态代理模式总结

  • 优点
    • 可以做到在符合设计原则中开闭原则的情况下对目标对象进行功能扩展
    • 可以使我们真实角色操作单一,不用关注公共业务
    • 公共业务直接丢给代理角色,实现了业务的分工
    • 公共业务发生扩展时,方法集中管理
  • 缺点
    • 一个真实角色就会产生一个代理角色,工作量以及代码量会翻倍,开发效率低,不易管理
静态代理模式只是开胃菜,那么为了解决静态代理模式所带来的缺点,我们就引出了动态代理模式。动态代理模式主要分为基于接口的 JDK 动态代理和基于子类的 CGLIB 动态代理

おすすめ

転載: blog.csdn.net/qq_39249094/article/details/117881771
おすすめ