1.代理模式

当用户和某个对象打交道,但是程序可能不希望用户之间访问该对象,而是提供一个中间对象来和用户打交道。这个中间对象就被称为代理对象。这种模式被称为代理模式。

代理模式的特点:

代理对象和被代理对象实现相同的接口。

当用户需要访问某个方法时,首先是调用的代理的方法,代理可能要验证某些信息或检查它所代理的对象是否可用。如果可用,代理就会调用被代理对象同样的方法。

2.如何实现

1)定义一个接口,由代理和被代理对象共同实现。

2)被代理对象,实现接口定义的方法。

3)代理对象,实现接口定义的方法。代理对象要持有被代理对象的引用。

3.代码实现

1)定义共同的接口

/**
 * 定义由代理和被代理所要实现的共同接口
 */
public interface CarInterface {
    public abstract boolean hasCar(String name);
}

2)创建被代理对象

/**
 * 被代理对象,负责正在的业务逻辑处理,幕后大Boss
 */
public class CarFactory implements CarInterface {
    @Override
    public boolean hasCar(String name) {
        //做一些逻辑判断
        return true;
    }
}

3)代理实现

/**
 * 代理对象
 * 1.实现同一个接口
 * 2.持有被代理对象的引用
 */
public class CarProxy implements CarInterface {
    CarFactory factory ;
    CarProxy(){
        factory =  new CarFactory();
    }
    @Override
    public boolean hasCar(String name) {
        //调用被代理对象的方法
        return factory.hasCar(name);
    }
}

4)测试代码

public class ProxyMain {
    public static void main(String args []){
        CarProxy shop = new CarProxy();
        boolean hasCar = shop.hasCar("BYD");
        System.out.println("hasCar " hasCar);
    }
}

4.拓展

在Android中我们调用getSystemService(string),拿到的对象,都是代理对象。最终都会通过Binder通信的方法,交给真正的SystemService进行处理,比如ActivityManagerService,WindManagerService等等。其实,这就行运用Binder跨进程通讯实现远程代理。这里不再赘述,后面会专门写文章进行讲解。

到此这篇关于Java代理模式的示例详解的文章就介绍到这了,更多相关Java代理模式内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Java代理模式的示例详解的更多相关文章

  1. ios – UITextFieldDelegate vs UITextField控件事件

    处理编辑开始或编辑结束的相同问题.它可以通过适当的委托方法或适当的事件来完成.如果控件事件可以进行必要的工作,那么textField代理是什么?

  2. swift详解之十一------------协议、委托(代理)模式

    协议、委托(代理)模式注:本小节总结协议以及依靠协议实现委托,这将在以后经常被使用。很简单的例子说明下,在协议中用static在实现类里可以用static或者class在协议中使用mutating变异方法。然后他就一共实现了两个协议,一个sayHello一个hmtl的这时候这两个方法就都可以用了当然我们的协议也是可以继承的。

  3. Swift 委托/代理设计模式

    Swift中的委托/代理模式与object-c的代理模式基本一致。代理模式的基本思想就是将我需要来完成的工作交给(委托给)另一个有我所规定的做这项工作能力的人来处理。代理模式的实现需借助于我们上一篇文章所讲的协议。比如说我找到了玛雅房屋让他们去帮我租租房。我只需要告诉他们我要一个大致什么位置,多大,什么类型,价格范围等,他们就可以帮我去租房。玛雅房屋就是接受委托的对象,因为他有满足我要求的能力。

  4. Swift实现委托代理的N种方式

    首先理清概念,delegate只是一种模式理念,不是具体方法。OK1.extension继承法:赋予某根类扩展“空方法”,使其子类继承后可重写成为代理。就要你成为我的奴隶2.protocal协议法:只要实现了指定protocal即可成为代理下蛋的鸡就是好鸡3.闭包+Tuple代理:swift中方法也是firstclassvalue这不是人,这不是妖,这是人妖4.继承NSObject使用methodForSelector,使用OC中NSObject提供的的“反射”机制完成调用无耻下作的典范

  5. Swift:界面传值大全

    声明了代理属性之后,我们需要在处理界面跳转(返回)的方法中处理协议传值的逻辑了。

  6. Swift设计模式之保护代理模式

    转自Swift设计模式原文Design-Patterns-In-Swift

  7. MVVM 不是那么好

    我觉得MVVM是一种反人类的设计模式,它使架构更加混乱而非清晰。MVVM命名很糟糕名称是很重要的。ViewModel这一名称则没有发挥任何作用。ViewModel的第一种含义是modelfortheview。MVVM引进太多职责命名不够具体,导致这个类的任务无休止地增长。MVVM不改变你的架构viewmodel并不能从根本上改变你的应用程序的架构。我能想到的MVVM模式最大的好处就是它把“下水道”从苹果自带的viewcontrooller类转移到了viewmodel这一自定义的对象。

  8. swift设计模式学习 - 代理模式

    代理模式的组成抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理模式的基本实现上图是最基本的代理模式的结构图,下面将用Swift代码来实现一个基本代理模式:以上是一个最基本的代理模式的构成,这样可以用Proxy来代替RealSubject,从而对客户端隐藏真实的对象。高扩展性以上是我对于代理模式的理解,如果有不对的地方欢迎大家交流,最后谢谢大家的阅读~~

  9. swift3.0之UIImagePickerController的使用和注意事项

    在oc中使用UIImagePickerController只要设置好代理、写代理方法就行了,但是在swift中编译没有什么问题,但是运行的时候会报错,选择一张图片,会显示库是私有的,不能访问,遇到这样的问题很好的解决办法就是在info.plist文件中添加Privacy-PhotoLibraryUsageDescription和Privacy-CameraUsageDescription两个字符串

  10. KVC原理剖析

    协议定义KVC全称是KeyValueCoding,定义在NSkeyvalueCoding.h文件中,是一个非正式协议。基础操作KVC主要对三种类型进行操作,基础数据类型及常量、对象类型、集合类型。在使用KVC时,直接将属性名当做key,并设置value,即可对属性进行赋值。在KVC进行属性赋值时,内部会对基础数据类型做处理,不需要手动做NSNumber的转换。集合属性操作根据KVO的实现原理,是在运行时生成新的子类并重写其setter方法,在其内容发生改变时发送消息。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部