代理模式

JAVA设计模式

余生颓废 提交于 2020-01-02 17:03:46
1、单例模式 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 通用代码:(是线程安全的) public class Singleton { private static final Singleton singleton = new Singleton(); //限制产生多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ return singleton; } //类中其他方法,尽量是 static public static void doSomething(){ } } 使用场景: ● 要求生成唯一序列号的环境; ● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数 器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确 保是线程安全的; ● 创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源; ● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式 (当然,也可以直接声明为 static 的方式)。 线程不安全实例: public class Singleton { private static Singleton singleton = null; /

c# 代理/委托 Delegate

醉酒当歌 提交于 2020-01-02 07:12:20
代码 1 . 委托的定义: 委托是函数的封装,它代表一 " 类 " 函数. 他们都符合一定的签名:拥有相同的参数列表,返回值类型.同时,委托也可以看成是对函数的抽象,是函数的 " 类 " .此时,委托的实例将代表一个具体的函数. 委托声明和定义了一个引用类型,它用来封装方法,用指定的签名来封装方法.一个委托的实例,可以封装静态或者实例方法. 委托是一种引用的类型,一旦为委托分配了方法,委托将与该方法完全相同的行为,委托方法的使用可以像其他任何方法一样, 具有参数和返回值 委托的一个特征是它们的类型是安全的.可以确保被调用的方法签名是正确的,但他们并不关心调用该方法的是什么类型的对象,甚至不考虑该方法是静态方法还是实例方法.(给定委托的实例可以表示任何类型的任何对象上的实例方法或静态方法,只要方法的签名匹配于委托的签名就可以). 2 . 委托的使用: 当要把方法传递给其他方法时,需要使用委托. 为什么什么用委托: 更加灵活的方法调用. 用于异步回调. 多线程编程中使用委托来定启动一个线程时调用的方法. C#中的事件模型,用他们来指明处理给定事件的方法. 例: class Program { // 定义委托 delegate double ProcessDelegate( double param1, double param2); static double Multiply(

关于Java的三种代理模式

南楼画角 提交于 2020-01-02 02:33:02
Java的三种代理模式 代理模式: 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法。 举个例子来说明代理的作用:假设我们想买票,那么并不是直接买票,而是联系黄牛,来达到同样的目的,卖票的人就是一个目标对象,而其他琐碎的事情就交给他的代理人(黄牛)来解决。这就是代理思想在现实中的一个例子。 用图表示如下: 代理模式的关键点是:代理对象与目标对象,代理对象是对目标对象的扩展,并会调用目标对象。 一.静态代理(类似于装饰者模式) 静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类。 下面举个案例来解释: 模拟保存动作,定义一个保存动作的接口,然后目标对象实现这个接口的方法。 此时如果使用静态代理方式,就需要在代理对象中也实现IUserDao接口,调用的时候通过调用代理对象的方法来调用目标对象。 需要注意的是,代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法。 /** * 接口 */ public interface IUserDao { void save(); }

Spring AOP 整理笔记

会有一股神秘感。 提交于 2020-01-02 02:17:13
一、AOP概念 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码. Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。 二、AOP中常用的术语 连接点(Joinpoint): 所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点,也可以理解连接点为:目标类上哪些有可能被增强的方法。 切点(Pointcut):可以理解为查询条件。一个target(目标类)的所有方法都是连接点,切点可以通过查询条件定位特定的连接点。 增强(Advice):织入目标类连接点上的一段程序代码。既包含连接点上的执行逻辑(横切逻辑、增强逻辑)又包含定位连接点的方位信息,before、after、around等。增强默认织入目标类的所有方法中。 目标对象(Target):增强逻辑织入的目标类。 代理(Proxy):一个类被AOP植入增强后,被产生一个结果代理类。 织入(Weaving):将通知(增强)应用到连接点上,生成代理的过程。 切面(Aspect

设计模式之动态代理

我是研究僧i 提交于 2020-01-02 00:46:56
一、动态代理概念 动态代理分为JDK动态代理和cglib动态代理两种方式。 jdk动态代理是由Java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。 总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,这样解决asm生成类过程低效问题)。 还有一点必须注意: jdk动态代理的应用前提,必须是目标类基于统一的接口。如果没有上述前提,jdk动态代理不能应用。 由此可以看出,jdk动态代理有一定的局限性,cglib这种第三方类库实现的动态代理应用更加广泛,且在效率上更有优势。 二、JDK动态代理 以下代码使用代理模式实现一个大小写字符转换的功能。 定义接口和实现类: ISomeService接口: package com.ietree.basicskill.designpattern.dynamicproxy.jdk; /** * 接口类 * * @author Root */ public interface ISomeService { String doFirst(); void doSecond(); } SomeServiceImpl实现类: package com.ietree.basicskill.designpattern.dynamicproxy.jdk; /** * 实现类

【学习】018 Spring框架

坚强是说给别人听的谎言 提交于 2020-01-01 12:46:53
Spring的概述 Spring框架,可以解决对象创建以及对象之间依赖关系的一种框架。 且可以和其他框架一起使用;Spring与Struts, Spring与hibernate (起到整合(粘合)作用的一个框架) Spring提供了一站式解决方案: 1) Spring Core spring的核心功能: IOC容器, 解决对象创建及依赖关系 2) Spring Web Spring对web模块的支持。 可以与struts整合,让struts的action创建交给spring spring mvc模式 3) Spring DAO Spring 对jdbc操作的支持 【JdbcTemplate模板工具类】 4) Spring ORM spring对orm的支持: 既可以与hibernate整合,【session】 也可以使用spring的对hibernate操作的封装 5)Spring AOP 切面编程 6)SpringEE spring 对javaEE其他模块的支持 Spring的环境搭建 spring环境需要maven 的jar包依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=

Android 蓝牙开发(1)

ぐ巨炮叔叔 提交于 2019-12-31 19:14:34
普通蓝牙设备官方文档 Android 平台包含蓝牙网络堆栈支持 ,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作: 扫描其他蓝牙设备 查询本地蓝牙适配器的配对蓝牙设备 建立 RFCOMM 通道 通过服务发现连接到其他设备 与其他设备进行双向数据传输 管理多个连接 传统蓝牙适用于电池使用强度较大的操作,例如 Android 设备之间的流传输和通信等。针对具有低功耗要求的蓝牙设备,Android 4.3(API 18)中引入了面向低功耗蓝牙的 API 支持。 基础知识 使用 Android Bluetooth API 来完成使用蓝牙进行通信的四项主要任务: 设置蓝牙 、 查找局部区域内的配对设备 或可用设备、 连接设备 ,以及在 设备之间传输数据 。 关于蓝牙的 API 在 android.bluetooth 包中,下面介绍一下和蓝牙相关的主要类 BluetoothAdapter 本地蓝牙适配器,是所有 蓝牙交互的入口点 ,表示蓝牙设备自身的一个蓝牙设备适配器, 整个系统只有一个蓝牙适配器 。通过它可以发现其他蓝牙设备,查询绑定(配对)设备的列表,使用已知的 Mac 地址实例化 BluetoothDevice 以及创建

常见的防火墙技术介绍

我是研究僧i 提交于 2019-12-31 08:35:37
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt280 防火墙是一个系统或一组系统,它在内网与Internet间执行一定的安全策略。典型的防火墙应包含如下模块中的一个或多个:包过滤路由器、应用层网关(或代理服务器)以及链路层网关。 防火墙的功能大体为以下五个方面: 1、通过防火墙可以定义一个关键点以防止外来入侵 2、监控网络的安全并在异常情况下给出报警提示 3、提供网络地址转换功能 4、防火墙可查询或登记Internet的使用情况 5、防火墙是为客户提供服务的理想位置,即在其上可以配置相应的服务,使Internet用户仅可以访问此类服务,而禁止对保护网络的其他系统的访问。 2.2.1 传统的边界防火墙 1、过滤式防火墙 包过滤是第一代防火墙技术,它主要包含了前面提到的包过滤路由器。这是一种通用、廉价、有效的安全手段。它对每一个数据报的包头,按照包过滤规则进行判定,与规则相匹配的包依据路由表信息继续转发,否则丢弃。 它的优点很明显: Ø 它工作在网络层,所以效率高速度也很快而且它不用改动客户机和主机上的应用程序。 Ø 大多数防火墙配置成无状态的包过滤路由器,因而实现包过滤几乎没有任何耗费。 Ø 另外,它对用户和应用来说是透明的,每台主机无需安装特定的软件,使用起来比较方便。 不过它的缺点也很明显: Ø

Java代理梳理

人盡茶涼 提交于 2019-12-31 02:26:52
参考&详细资料: java 代理 理解原理及实现 JDK的Proxy技术实现AOP,InvocationHandler和Proxy详解——Spring AOP(三) JAVA JDK的动态代理反射实现 Spring AOP中的JDK和CGLib动态代理哪个效率更高? 一、静态代理 由程序员创建或特定工具自动生成源代码,也就是 在编译时就已经将接口,被代理类,代理类等确定下来。在程序运行之前,代理类的.class文件就已经生成。 代理模式最主要的就是有一个公共接口,一个具体的类,一个代理类,代理类持有具体类的实例,代为执行具体类实例方法。 上面说到,代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。这里的间接性就是指不直接调用实际对象的方法,那么我们在代理过程中就可以加上一些其他用途。 二、动态代理 代理类在程序运行时创建的代理方式被称为动态代理。 1、JDK代理 要实现动态代理首先要求代理对象需要实现接口,即需要有 一个接口类 和 一个实现类 。其次,需要一个类 实现InvocationHandler接口 用来进行代理事务的处理。该类需要通过构造方法 获得目标类对象的引用 ,同时 实现invoke方法 。之后利用Proxy的工厂方法 newProxyInstance()创建一个代理对象 ,这个对象同样可以实现对具体类的代理功能。 实现原理: JDK

设计模式与代码的结构特性

家住魔仙堡 提交于 2019-12-30 17:36:41
我选择的设计模式为代理模式。 代理模式的定义与特点 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 代理模式的主要优点有: 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度; 其主要缺点是: 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢; 增加了系统的复杂度; 代理模式的结构与实现 代理模式的结构比较简单,主要是通过定义一个继承抽象主题的代理来包含真实主题,从而实现对真实主题的访问,下面来分析其基本结构和实现方法。 1. 模式的结构 代理模式的主要角色如下。 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。 其结构图如图 1 所示。    2. 模式的实现 代理模式的实现代码如下: package proxy; public class ProxyTest {