深度学习设计模式之代理模式
代理模式是结构型设计模式,主要是为其他对象提供一种代理以控制对这个对象的访问。代理模式(Proxy Pattern)是一种常用的设计模式,属于结构型模式之一。它为另一个对象提供一个代替或占位符对象,以便控制对它的访问。代理模式中客户端不直接调用实际的对象,而是通过调用代理间接性的调用实际的对象。
·
前言
代理模式是结构型设计模式,主要是为其他对象提供一种代理以控制对这个对象的访问。
一、介绍
代理模式(Proxy Pattern)是一种常用的设计模式,属于结构型模式之一。它为另一个对象提供一个代替或占位符对象,以便控制对它的访问。代理模式中客户端不直接调用实际的对象,而是通过调用代理间接性的调用实际的对象。
二、详细分析
1.核心组成
-
Subject(抽象接口):定义了原始对象和代理对象的共同接口。
-
RealSubject(真实对象):被代理的真实对象,实现了抽象接口。
-
Proxy(代理对象):包含对真实对象的引用,并实现了与真实对象相同的接口,以便可以在任何时刻代替真实对象。
2.实现步骤
- 创建抽象接口;
- 创建真实对象并实现抽象接口;
- 创建代理对象并实现抽象接口,代理对象中引入真实对象;
- 创建测试类,调用代理对象方法以实现增强的目的。
3.代码示例
抽象接口
/**
* Subject 抽象接口
*/
public interface RentingHouse {
/**
* 租房
*/
void rentingHouse();
}
真实对象
/**
* 房东
* RealProject:真实的对象
*/
public class LandlordOrLandlady implements RentingHouse{
@Override
public void rentingHouse() {
System.out.println("房东:我有一套在市中心120平米精装修二室一厅");
}
}
代理对象
/**
* 中介
* Proxy:代理对象
*/
public class Intermediary implements RentingHouse{
/**
* 真实对象
*/
private RentingHouse real = new LandlordOrLandlady();
@Override
public void rentingHouse() {
real.rentingHouse();
System.out.println("中介:线上租赁渠道");
System.out.println("中介:线下门店开放");
System.out.println("中介:全年无休,只为带你看房");
}
}
测试类
public static void main(String[] args) {
RentingHouse intermediary = new Intermediary();
intermediary.rentingHouse();
}
结果
4.优缺点
优点
-
可以在访问一个类时做一些控制,或增强一些功能;
-
符合开闭原则,具有较好的灵活性和可扩展性。
缺点
- 增加系统的复杂度和调用链路。
5.使用场景
- 客户端不想直接访问实际的对象,或者访问实际的对象存在困难,通过一个代理对象来完成间接的访问;
- 想在访问一个类时做一些控制,或者增强功能。
总结
本篇文章简单介绍了,代理模式的原理、优缺点和使用场景,并提供案例代码。正常代理模式又分为动态代理和静态代理,熟悉spring的同学应该知道,spring中使用了大量的动态代理,对此打算深入研究的同学可以去查阅动态代理和静态代理相关资料。
更多推荐
已为社区贡献5条内容
所有评论(0)