设计模式 -- 代理模式(Proxy Pattern)
代理模式:一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
介绍
意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决问题:在直接访问对象时带来的问题,直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
关键代码:实现与被代理类组合。
优点:1、职责清晰。 2、高扩展性。 3、智能化。
缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
示例
以绘制 三角形、圆形、矩形功能为例:
定义接口
public interface Draw {
void circularAction();
void rectangleAction();
void triangleAction();
}
实现类
public class RealDraw implements Draw {
@Override
public void circularAction() {
//绘制圆形
}
@Override
public void rectangleAction() {
//矩形
}
@Override
public void triangleAction() {
//三角形
}
}
代理类
public class ProxyDraw implements Draw {
private RealDraw realDraw;
@Override
public void circularAction() {
if(realDraw == null){
realDraw = new RealDraw();
}
realDraw.circularAction();
}
@Override
public void rectangleAction() {
if(realDraw == null){
realDraw = new RealDraw();
}
realDraw.rectangleAction();
}
@Override
public void triangleAction() {
if(realDraw == null){
realDraw = new RealDraw();
}
realDraw.triangleAction();
}
}
使用
public static void main(String[] args) {
ProxyDraw proxyDraw = new ProxyDraw();
proxyDraw.circularAction();
proxyDraw.rectangleAction();
proxyDraw.triangleAction();
}
————————————————
版权声明:本文为CSDN博主「小铁-Android」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_50675668/article/details/134401811
介绍
意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决问题:在直接访问对象时带来的问题,直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
关键代码:实现与被代理类组合。
优点:1、职责清晰。 2、高扩展性。 3、智能化。
缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
示例
以绘制 三角形、圆形、矩形功能为例:
定义接口
public interface Draw {
void circularAction();
void rectangleAction();
void triangleAction();
}
实现类
public class RealDraw implements Draw {
@Override
public void circularAction() {
//绘制圆形
}
@Override
public void rectangleAction() {
//矩形
}
@Override
public void triangleAction() {
//三角形
}
}
代理类
public class ProxyDraw implements Draw {
private RealDraw realDraw;
@Override
public void circularAction() {
if(realDraw == null){
realDraw = new RealDraw();
}
realDraw.circularAction();
}
@Override
public void rectangleAction() {
if(realDraw == null){
realDraw = new RealDraw();
}
realDraw.rectangleAction();
}
@Override
public void triangleAction() {
if(realDraw == null){
realDraw = new RealDraw();
}
realDraw.triangleAction();
}
}
使用
public static void main(String[] args) {
ProxyDraw proxyDraw = new ProxyDraw();
proxyDraw.circularAction();
proxyDraw.rectangleAction();
proxyDraw.triangleAction();
}
————————————————
版权声明:本文为CSDN博主「小铁-Android」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_50675668/article/details/134401811
本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com