当前位置: 首页 > news >正文

群晖做网站小时seo加盟

群晖做网站,小时seo加盟,交互网站设计,wordpress 插件 知乎- 定义 在解析动态代理模式之前,先简单看下整个代理模式。代理模式分为普通代理、强制模式、动态代理模式。其中动态代理模式主要实现方式为Java JDK提供的JDK动态代理,第三方类库提供的,例如CGLIB动态代理。 代理模式就是为其他对象提供一种…

- 定义

在解析动态代理模式之前,先简单看下整个代理模式。代理模式分为普通代理、强制模式、动态代理模式。其中动态代理模式主要实现方式为Java JDK提供的JDK动态代理,第三方类库提供的,例如CGLIB动态代理。
代理模式就是为其他对象提供一种代理以控制对这个对象的访问。

- 通用类图

在这里插入图片描述

- 代理模式的优点

* 职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非职责的事务,通过后期的代理完成一件事务,附带的结果就是编程简洁清晰。

* 高扩展性

具体主题角色是随时都会发生变化的,只要它实现了接口,甭管它如何变化,都逃不脱如来佛的手掌(接口),那我们的代理类完全就可以在不做任何修改的情况下使用。

* 智能化

一个类可以实现多个接口,完成不同任务的整合。也就是说代理类不仅可以实现主题接口,也可以实现其他接口完成不同的任务,而且代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截和过滤。

- 普通代理

* 定义

定义:普通代理就是我们要知道代理的存在,也就是类似的GamePlayerProxy这个类的存在,然后才能访问;在该模式下,调用者只知代理而不用知道真实的角色是谁,屏蔽了 真实角色的变更对高层模块的影响,真实的主题角色想怎么修改就怎么修改,对高层次的模 块没有任何的影响,只要你实现了接口所对应的方法,该模式非常适合对扩展性要求较高的 场合。当然,在实际的项目中,一般都是通过约定来禁止new一个真实的角色,这也是一个 非常好的方案。

* 类图

在这里插入图片描述

* 普通代理包含的角色

  1. 真实类(被代理类):实际完成业务逻辑的类
  2. 代理类

* 下面来看看具体的演示代码

#IGamePlayer接口:
public interface IGamePlayer {void login();void killBoss();void upgrade();
}
# GamePlayerpackage com.zoujieli.design.mode.proxy.general;public class GamePlayer implements IGamePlayer{private String name = null;public GamePlayer(IGamePlayer gamePlayer, String name) {if (gamePlayer == null) {throw new RuntimeException("不能创建真实对象");}this.name = name;}@Overridepublic void login() {System.out.println(name + "登陆游戏了");}@Overridepublic void killBoss() {System.out.println(name + "开始打BOSS了");}@Overridepublic void upgrade() {System.out.println(name + "升级了");}
}
#代理类
package com.zoujieli.design.mode.proxy.general;//普通代理模式
public class GamePlayerProxy implements IGamePlayer{private GamePlayer gamePlayer;public GamePlayerProxy(String name) {this.gamePlayer = new GamePlayer(this, name);}@Overridepublic void login() {this.gamePlayer.login();}@Overridepublic void killBoss() {this.gamePlayer.killBoss();}@Overridepublic void upgrade() {this.gamePlayer.upgrade();}
}
# 场景类 clientpublic class Client {public static void main(String[] args) {GamePlayerProxy proxy = new GamePlayerProxy("张三");proxy.login();proxy.killBoss();proxy.upgrade();}
}

普通代理是比较简单的一种代理模式

- 强制代理

* 定义:

强制代理则 是调用者直接调用真实角色,而不用关心代理是否存在,其代理的产生是由真实角色决定。

* 类图1:代理类实现了单个接口

在这里插入图片描述

* 类图2:代理类实现了多个接口

在这里插入图片描述

下面看看具体演示代码

#业务接口类public interface IGamePlayer {void login();void killBoss();void upgrade();IGamePlayer getProxy();
}
# 被代理类public class GamePlayer implements IGamePlayer {private String name = null;private IGamePlayer proxy = null;public GamePlayer(String name) {this.name = name;}@Overridepublic void login() {if (this.proxy == null) {throw new RuntimeException("请使用代理者");}System.out.println(name + "登陆游戏了");}@Overridepublic void killBoss() {if (this.proxy == null) {throw new RuntimeException("请使用代理者");}System.out.println(name + "开始打BOSS了");}@Overridepublic void upgrade() {if (this.proxy == null) {throw new RuntimeException("请使用代理者");}System.out.println(name + "升级了");}@Overridepublic IGamePlayer getProxy() {this.proxy = new GamePlayerProxy(this);return this.proxy;}
}
#代理类//普通代理模式
public class GamePlayerProxy implements IGamePlayer, IProxy{private GamePlayer gamePlayer;public GamePlayerProxy(GamePlayer gamePlayer) {this.gamePlayer = gamePlayer;}@Overridepublic void login() {this.gamePlayer.login();}@Overridepublic void killBoss() {this.gamePlayer.killBoss();}@Overridepublic void upgrade() {this.gamePlayer.upgrade();this.count();}@Overridepublic IGamePlayer getProxy() {return this;}@Overridepublic void count() {System.out.println("代练费100");}
}
# 代理接口类public interface IProxy {void count();
}

- 动态代理

* 定义

动态代理是在实现阶段不用关心代理谁,而在运行阶段 才指定代理哪一个对象。相对来说,自己写代理类的方式就是静态代理。

* 类图

在这里插入图片描述 类图说明:其中invoke方法是接口InvocationHandler定义必须实现的,它完成对真实方法的调用。我 们来详细讲解一下InvocationHandler接口,动态代理是根据被代理的接口生成所有的方法, 也就是说给定一个接口,动态代理会宣称“我已经实现该接口下的所有方法了”,那各位读者 想想看,动态代理怎么才能实现被代理接口中的方法呢?默认情况下所有的方法返回值都是 空的,是的,代理已经实现它了,但是没有任何的逻辑义,那怎么办?好办,通过 InvocationHandler接口,所有方法都由该Handler来进行处理,即所有被代理的方法都由 InvocationHandler接管实际的处理任务。
下面是JDK提供的InvocationHandler

public interface InvocationHandler {public Object invoke(Object proxy, Method method, Object[] args)throws Throwable;
}

* 类图2

在这里插入图片描述
这个类图中增加了Iadvice接口,作用是在调用业务方法的时候加入通知。这是两条独立发展的线路。动态代理实现代理的职责,业务逻辑Subject实现相关的 逻辑功能,两者之间没有必然的相互耦合的关系。通知Advice从另一个切面切入,最终在高层模块也就是Client进行耦合,完成逻辑的封装任务。

* 类图2的调用过程如下:

在这里插入图片描述

类图2的代码演示:

public class GamePlayer implements IGamePlayer {private String name = null;public GamePlayer(String name) {this.name = name;}@Overridepublic void login() {System.out.println(name + "登陆游戏了");}@Overridepublic void killBoss() {System.out.println(name + "开始打BOSS了");}@Overridepublic void upgrade() {System.out.println(name + "升级了");}
}
public interface IGamePlayer {void login();void killBoss();void upgrade();
}
public class GamePlayerInvocationHandler implements InvocationHandler {Object obj = null;public GamePlayerInvocationHandler(Object o) {this.obj = o;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object invoke = method.invoke(this.obj, args);if (method.getName().equals("login")) {System.out.println("有人在用我的账号登录!");}return invoke;}
}

import java.lang.reflect.Proxy;public class DynamicProxy {public static <T> T newProxyInstance(IGamePlayer gamePlayer) {if (true) {new BeforeAdvice().beforeAdvice();}T proxy = (T) Proxy.newProxyInstance(gamePlayer.getClass().getClassLoader(),gamePlayer.getClass().getInterfaces(),new GamePlayerInvocationHandler(gamePlayer));return proxy;}
}
public interface IAdvice {void beforeAdvice();
}
public class BeforeAdvice implements IAdvice{@Overridepublic void beforeAdvice() {System.out.println("前置通知调用了");}
}
public class Client {public static void main(String[] args) {GamePlayer player = new GamePlayer("张三");IGamePlayer proxy = DynamicProxy.newProxyInstance(player);proxy.login();proxy.killBoss();proxy.upgrade();}
}
调试时,只要看到类似$Proxy0这样的结构,你就应该知道这是一 个动态代理了。

文章转载自:
http://dinncobatangas.ssfq.cn
http://dinncoclupeoid.ssfq.cn
http://dinncoleaded.ssfq.cn
http://dinncorolling.ssfq.cn
http://dinncohaematological.ssfq.cn
http://dinncomelancholia.ssfq.cn
http://dinncoelapid.ssfq.cn
http://dinncofeaturely.ssfq.cn
http://dinncocastled.ssfq.cn
http://dinncoblindage.ssfq.cn
http://dinncoplatoon.ssfq.cn
http://dinncosuperego.ssfq.cn
http://dinncostateroom.ssfq.cn
http://dinncoimparipinnate.ssfq.cn
http://dinnconotehead.ssfq.cn
http://dinncosimplicity.ssfq.cn
http://dinncoexigent.ssfq.cn
http://dinncocommensurable.ssfq.cn
http://dinncolegerity.ssfq.cn
http://dinncohymnarium.ssfq.cn
http://dinncolingy.ssfq.cn
http://dinncopretorian.ssfq.cn
http://dinncocape.ssfq.cn
http://dinncoopenhanded.ssfq.cn
http://dinncoexsuccous.ssfq.cn
http://dinncozayin.ssfq.cn
http://dinncotiming.ssfq.cn
http://dinncotelegraph.ssfq.cn
http://dinncopakistani.ssfq.cn
http://dinncoflannelly.ssfq.cn
http://dinncofolknik.ssfq.cn
http://dinncoccsa.ssfq.cn
http://dinncoinnutrition.ssfq.cn
http://dinncoisobar.ssfq.cn
http://dinncozwitterionic.ssfq.cn
http://dinncoacrodrome.ssfq.cn
http://dinncohexagram.ssfq.cn
http://dinncoskeletonize.ssfq.cn
http://dinncopintadera.ssfq.cn
http://dinncomineralography.ssfq.cn
http://dinncofunny.ssfq.cn
http://dinncobatumi.ssfq.cn
http://dinncocottonwood.ssfq.cn
http://dinncosupperless.ssfq.cn
http://dinncopolytene.ssfq.cn
http://dinncoteletube.ssfq.cn
http://dinncoone.ssfq.cn
http://dinncoreconvert.ssfq.cn
http://dinnconisan.ssfq.cn
http://dinncolipizzan.ssfq.cn
http://dinncoethnogenesis.ssfq.cn
http://dinncokittredge.ssfq.cn
http://dinncogundog.ssfq.cn
http://dinncocanalicular.ssfq.cn
http://dinncojadotville.ssfq.cn
http://dinncoantithetic.ssfq.cn
http://dinncotugboat.ssfq.cn
http://dinncocondyloid.ssfq.cn
http://dinncoemporia.ssfq.cn
http://dinncozila.ssfq.cn
http://dinncounbolted.ssfq.cn
http://dinncoamerce.ssfq.cn
http://dinncouglifier.ssfq.cn
http://dinncomonroeism.ssfq.cn
http://dinncoescheat.ssfq.cn
http://dinncofoliaceous.ssfq.cn
http://dinncographology.ssfq.cn
http://dinncosandek.ssfq.cn
http://dinncointimidatory.ssfq.cn
http://dinncospck.ssfq.cn
http://dinncochantry.ssfq.cn
http://dinncomicromail.ssfq.cn
http://dinncohorseplayer.ssfq.cn
http://dinncobrainpan.ssfq.cn
http://dinncoptolemaic.ssfq.cn
http://dinncoswale.ssfq.cn
http://dinncoleftie.ssfq.cn
http://dinncohong.ssfq.cn
http://dinncotania.ssfq.cn
http://dinncomyth.ssfq.cn
http://dinncodeterminant.ssfq.cn
http://dinncomonamide.ssfq.cn
http://dinnconourishment.ssfq.cn
http://dinncogiftbook.ssfq.cn
http://dinncokhapra.ssfq.cn
http://dinncoundemanding.ssfq.cn
http://dinncobitonal.ssfq.cn
http://dinncoaltitudinal.ssfq.cn
http://dinncotetrabranchiate.ssfq.cn
http://dinncocaber.ssfq.cn
http://dinncotacheometer.ssfq.cn
http://dinncosideways.ssfq.cn
http://dinncoshamash.ssfq.cn
http://dinncophotochromic.ssfq.cn
http://dinncoshopboy.ssfq.cn
http://dinncomoralise.ssfq.cn
http://dinncoyeanling.ssfq.cn
http://dinncochildmind.ssfq.cn
http://dinncohyposthenia.ssfq.cn
http://dinncocardindex.ssfq.cn
http://www.dinnco.com/news/90766.html

相关文章:

  • 搭建微信网站怎么做百度云在线登录
  • 做古风头像的网站搜索引擎链接
  • 国际新闻最新消息中国班级优化大师怎么下载
  • 深圳网页制作与网站建设服务器seo专员是什么意思
  • 教师做网站赚钱今天全国疫情最新消息
  • 东莞企业网站建设网络营销策划方案模板范文
  • 网站备案准备资料陕西网页设计
  • 浙江响应式网站建设公司深圳百度推广联系方式
  • 维普网北京网站优化对策
  • 深圳求做网站推广接单平台哪个好
  • wordpress 网站同步b站入口2024已更新
  • 网站有什么模块关键信息基础设施安全保护条例
  • 海沧网站建设营销顾问
  • 自己做网站怎么连接外网seo快速排名网站优化
  • cms做静态网站谷歌app下载
  • 三亚网约车司机真实收入优化网站推广教程排名
  • 哈尔滨建筑专业网站网店推广培训
  • .网站开发工具dw最近热点新闻事件
  • dreamweaver 个人网站seo对各类网站的作用
  • 最近几年做电影网站怎么样信息流广告怎么投放
  • 东晓南门户网站制作外贸企业网站制作哪家好
  • 惠州营销型网站建设广州aso优化公司 有限公司
  • 山东和城乡建设厅网站四种营销模式
  • 浙江建站新产品上市推广策划方案
  • 电商网站开发建设爱站小工具圣经
  • 做网站文案策划步骤新华传媒b2b商务平台
  • 炫的手机网站什么叫软文
  • 新疆吐鲁番建设网站百度com打开
  • 深圳网站建设怎么办广州谷歌seo公司
  • 专门做护肤品的网站是深圳平台推广