免费网站代码/企业网站seo诊断报告
文章目录
- 什么是代理模式
- 代理模式的种类
- 代理模式的结构
- 静态代理
- 1、创建抽象主题类
- 2、创建具体主题类
- 3、创建代理类对象
- 4、创建消费者类
- 小结
- 代码下载地址
什么是代理模式
给某个对象提供一个代理,以控制对该对象的访问。
访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
代理模式的种类
在Java中,代理模式一般分为以下几种类型:静态代理
、动态代理
。
静态
代理:编译期
生成。动态
代理:Java运行时动态
生成。一般有JDK代理
和CGLib代理
两类。
代理模式的结构
代理模式中,分为以下三种角色:
- 抽象主题类(Subject):
定义规范!
通过接口或者抽象类
声明真实主题
和代理对象
实现的业务
方法。 - 真实主题类(Real Subject):
实现
抽象主题
中的具体业务,是代理对象所代表的真实对象,即最终需要引用的对象。 - 代理类(Proxy):
提供了与真实主题相同的接口,其内部包含有对真实主题的引用。它可以访问、控制或扩展真实主题的功能。
静态代理
就拿生活中一个简单案例做静态代理
的说明。
像各大手机厂商,都提供对外卖手机的功能,但其本身在各个工厂;
需要购买手机的顾客不可能为了买手机去各个工厂中购买。
此时则需要在各个城市中设有手机专卖店,比如华为手机、苹果手机等。方便客户购买。
根据上述的实际生活场景和逻辑,可以编写如下的测试代码案例:
1、创建抽象主题类
创建抽象主题类,定义实现规范。
代理对象和真实主题类,都需要实现该接口。
package proxy.static1;/*** 抽象主题类:定义规范;* 子类有真实主题类和代理对象*/
public interface SellPhone {// 定义约束,代理对象和具体主题对象,都有卖的操作void sell();
}
2、创建具体主题类
实现上述定义的约束。
package proxy.static1;/*** 具体类:此处为华为手机生产商*/
public class HWContractor implements SellPhone {@Overridepublic void sell() {System.out.println("华为厂商卖手机");}
}
3、创建代理类对象
代理类对象本身不生产设备,只做设备的搬运工!
package proxy.static1;/*** 华为手机代售点卖手机*/
public class ProxyPoint implements SellPhone {// 聚合 手机生产商private HWContractor hwContractor = new HWContractor();@Overridepublic void sell() {// 代售点本身并非是生产手机,代售点卖手机,手机来源依旧是生产商// 只是代售点可以赚取差价利益System.out.println("代售点赚取手续费");hwContractor.sell();}
}
4、创建消费者类
消费者采取代理点购买
的方式,间接购买所需手机产品。
package proxy.static1;public class Client {public static void main(String[] args) {// 顾客从代理点购买手机// 1、实例化代售点对象ProxyPoint proxyPoint = new ProxyPoint();// 2、调用代理点的售卖渠道,获得设备proxyPoint.sell();}
}
小结
客户端不需要直接访问具体的生产厂商,只需要根据各个城市的具体代理点,就能买到自己想要的设备。
给某个对象提供一个代理,以控制对该对象的访问。
测试类直接访问ProxyPoint
类对象,即ProxyPoint
类作为了访问对象和目标对象的中介。同时,ProxyPoint
中具体的方式也是对目标对象 HWContractor
的增强。
代码下载地址
静态代理测试案例