zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

[Head First设计模式]抢票中的设计模式——代理模式

代理模式设计模式 First head 抢票
2023-09-14 09:01:01 时间

[Head First设计模式]山西面馆中的设计模式——装饰者模式

[Head First设计模式]山西面馆中的设计模式——观察者模式

[Head First设计模式]山西面馆中的设计模式——建造者模式

[Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式

[Head First设计模式]一个人的平安夜——单例模式

闲着没事,终于又拿起Head First设计模式 翻了翻,脑海里也一直在想抢票的事,抢票中使用一些抢票工具,这个抢票工具是否就是一个中间代理呢?

什么是代理?

自己的理解就是有些事排个代表可以去做,自己也可以去做,这个代表就是代理,比如抢票这件事,抢票工具就是个代理,有没有它,自己一样可以去买票。

代理模式定义

代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。

使用代理模式创建代表(Representative)对象,让代表控制某对象的访问,被代理的对象可以是远程对象,创建开销大的对象或需安全控制的对象。

代理模式的类图

Subject:它为RealSubject和Proxy提供了接口,通过实现同一接口,Proxy在RealSubject出现的地方取代它。

RealSubject是真正做事的对象,它是被proxy代理和控制访问的对象。

Proxy持有RealSubject的引用。在某些例子中,Proxy还会负责RealSubject对象的创建与销毁。客户和RealSubject的交互都必须通过Proxy。因为Proxy和RealSubject实现相同的接口Subject。所以任何用到RealSubject的地方,都可以用Proxy取代。Proxy也控制了对RealSubject的访问,在某些情况下,我们可能需要这样的控制。这些情况包括RealSubject是远程的对象,RealSubject创建开销大,或RealSubject需要被保护。

抢票的实例

接口

复制代码
 1 using System;

 2 using System.Collections.Generic;

 3 using System.Linq;

 4 using System.Text;

 5 using System.Threading.Tasks;

 6 namespace Wolfy.代理模式

 8 /// summary 

 9 /// 抽象类subject接口类 抢票工具 ,自己都继承该抽象类 都具有抢票方法

10 /// /summary 

11 public abstract class BaseWork

13 /// summary 

14 /// 抢票方法

15 /// /summary 

16 public abstract void DoForceTick();

18 }
复制代码

抢票工具类

复制代码
 1 using System;

 2 using System.Collections.Generic;

 3 using System.Linq;

 4 using System.Text;

 5 using System.Threading.Tasks;

 7 namespace Wolfy.代理模式

 9 public class TicketTool : BaseWork

11 MySelf myself;

12 public override void DoForceTick()

14 if (myself == null)

16 myself = new MySelf();

18 myself.DoForceTick();

21 }
复制代码

自己

复制代码
 1 using System;

 2 using System.Collections.Generic;

 3 using System.Linq;

 4 using System.Text;

 5 using System.Threading.Tasks;

 7 namespace Wolfy.代理模式

 9 public class MySelf:BaseWork

11 public override void DoForceTick()

13 Console.WriteLine("抢一张北京西-郑州的火车票");

16 }
复制代码

控制台

复制代码
 1 using System;

 2 using System.Collections.Generic;

 3 using System.Linq;

 4 using System.Text;

 5 using System.Threading.Tasks;

 7 namespace Wolfy.代理模式

 9 class Program

11 static void Main(string[] args)

13 //自己抢票

14 MySelf myself = new MySelf();

15 myself.DoForceTick();

16 //抢票工具

17 TicketTool tool = new TicketTool();

18 tool.DoForceTick();

19 Console.Read();

22 }
复制代码

结果

代理模式优点:

(1).职责清晰 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。 (2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。 (3).高扩展性 代理模式的分类:远程(Remote)代理,虚拟(Virtual)代理,Copy-on-Write代理,智能引用(Smart Reference)代理。 各代理的具体说明,请参考:http://www.cnblogs.com/rush/archive/2011/06/19/2084775.html 如若对该模式的理解有误,请留言,讨论一下,共同学习=进步,谢谢 Head First 设计模式
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3514935.html
设计模式学习——代理模式(1) 一、什么是代理模式 为其他对象提供一种代理以控制对这个对象的访问。其类图如下: Subject:抽象主题类,它既可以是抽象类也可以是接口类,是一个最普通的业务类型定义,无特殊要求。 RealSubject:具体主题类,被代理角色,是具体业务逻辑实现执行者。 Proxy:代理类,负责对具体主题的应用,
设计模式学习——代理模式(2) 上一篇我们简单介绍了什么是代理模式,但我们说的仅仅是静态代理,所谓静态代理即代理类和目标类在代码中是确定的,因此称为静态,这种方式存在以下问题: 由于在使用时需要提前定义好代理类并实现对应主题的接口方法,随着需要代理的主题增加,代理类也会增加,导致项目中出现大量类情况,不易于项目维护。 那么有没有什
设计模式之代理模式(文末赠书) JDK动态代理的实现原理是动态创建代理类并通过指定类加载器进行加载,在创建代理对象时将InvocationHandler对象作为构造参数传入。当调用代理对象时,会调用 InvocationHandler.invoke() 方法,从而执行代理逻辑,并最终调用真正业务对象的相应方法。
Head First设计模式之代理模式 一、定义 定义:为其他对象提供一种代理以控制对这个对象的访问 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 代理模式一般会有三个角色: 抽象角色(Subject):指代理角色和真实角色对外提供的公共方法,一般为一个接口 真实角色(RealSubject):需要实现抽象角色接口,定义了真实角色所要实现的业务逻辑,以便供代理角色调用。
设计模式之禅之代理模式 jdk的动态代理的条件: === 要实现动态代理的首要条件是:被代理类必须实现一个接口,回想一下前面的分析吧。当然了,现在也有很多技术如CGLIB可以实现不需要接口也可以实现动态代理的方式。   动态代理的应用 代理模式应用得非常广泛,大到一个系统框架、企业平台,小到代码片段、事务处理,稍不留意就用到代理模式。