`
8366
  • 浏览: 813015 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

代理模式(转载)

阅读更多

代理模式应用场景举例

    比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提供卖车的服务”给有需求的人士。从面向对象的方面考虑,“销售汽车的代理”也是一个对象,那么这个对象也具有一定的状态,在软件项目中这个对象也具有管理财务进销存的基本功能,那么在设计时就要以面向OOP编程的思想来考虑软件的类结构,这个销售汽车的代理也是一个类了。

    【代理模式解释】

    类型:结构模式

    对一些对象提供代理,以限制那些对象去访问其它对象。

    【代理模式UML图

    【代理模式-JAVA代码实现

    新建一个买车的接口:

 

 

 

package buy_car_package;
public interface buy_car_package {
    public void buy_car();
}

 

新建一个people人类,具有买车的行为,所以实现接口buy_car_package:

 

package buy_car_imple;

import buy_car_package.buy_car_package;
public class people implements buy_car_package {

    private int cash;
    private String username;

    public int getCash() {
        return cash;
    }

    public void setCash(int cash) {
        this.cash = cash;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    public void buy_car() {
        System.out.println(username + "买了一台新车");
    }
}

 

  people类不能拥有车,必须经过proxy代理类的认证,符合条件之后才可以拥有车辆,新建一个代理,这个代理类来考察当前的people是否有资格进行买车:

 

package buy_car_imple;

import buy_car_package.buy_car_package;

public class proxy_buy_car_imple implements buy_car_package {

    private people people;

    public people getPeople() {
        return people;
    }

    public void setPeople(people people) {
        this.people = people;
    }

    public void buy_car() {
        if (people.getCash() > 3000) {
            System.out.println(people.getUsername() + "花" + people.getCash()
                    + "块 买了新车 交易结束");
        } else {
            System.out.println(people.getUsername() + "金钱不够,请继续比赛!");
        }
    }

}

 

  最后创建一个客户端,用来模拟买车的行为:

package run_main;

import buy_car_imple.people;
import buy_car_imple.proxy_buy_car_imple;

public class run_main {
    public static void main(String[] args) {
        people people_ref1 = new people();
        people_ref1.setCash(4000);
        people_ref1.setUsername("高洪岩");

        people people_ref2 = new people();
        people_ref2.setCash(2000);
        people_ref2.setUsername("岩洪高");

        proxy_buy_car_imple proxy_buy_car_imple = new proxy_buy_car_imple();
        proxy_buy_car_imple.setPeople(people_ref1);
        proxy_buy_car_imple.buy_car();

        proxy_buy_car_imple.setPeople(people_ref2);
        proxy_buy_car_imple.buy_car();

    }
}

 

程序运行结果如下:

 

高洪岩花4000块 买了新车 交易结束
岩洪高金钱不够,请继续比赛
!

    这样people就不可能自由的拥有车辆,必须经过proxy的认证之后才可以。

    而代理模式在GOF四人帮的介绍中大体有4种使用情景:

    (1)远程代理。典型的就是客户端与webservice使用的情况,客户端由于是针对OOP编程,而不是针对webservice中的方法进行编程,所以得在客户端模拟一下webservice的环境,用proxy来对webservice进行包装,这样就可以使用proxy代理类来远程操作webservice了。

    (2)虚拟代理。比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开。

    (3)安全代理。其实也就是本例中所举的买车的例子,金钱不够不可以买车!

    (4)智能指引。比如在访问一个对象时检测其是否被锁定等情况。

 

 

附件是:【代理模式-MyEclipse6项目JAVA代码实现

分享到:
评论

相关推荐

    android设计模式详解转载

    9. 代理模式:为其他对象提供一种代理以控制对这个对象的访问。在Android中,我们可以用它来实现远程调用、权限控制等功能。 10. 外观模式(Facade模式):为子系统提供一个统一的接口,使得客户端无需知道子系统的...

    二十三种设计模式【PDF版】

    以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成...

    Java23种设计模式

    7. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 适用场景:在需要控制对一个对象的访问时;当无法或不想直接引用一个对象,或者访问一个对象存在开销时。 行为型模式主要包括: 1. 责任链...

    Java程序员面试的试题集(1_122)帮助初学者的技术问题(转载)

    CORBA,全称为Common Object Request Broker Architecture,即公共对象请求代理体系结构,是由Object Management Group(OMG)制定的一项标准。其核心目标在于实现不同编程语言编写的应用程序在异构环境下进行通信的...

    (转载)自己动手写一个spring

    4. **AOP代理**: Spring提供JDK动态代理和CGLIB代理来实现AOP。前者用于接口,后者用于类。 5. **数据访问/集成**: 包括JDBC、ORM(Object-Relational Mapping,如Hibernate)、OXM(Object-XML Mapping,如JAXB)等...

    大学生创业计划案例-APP移动应用[社区通]商业计划书.pptx

    - **内容建设**:原创及转载高质量内容 - **搜索引擎优化(SEO)**:聘请顾问优化站点结构与内容 - **社群营销**:在各大论坛、圈子、QQ群等渠道推广 - **软文推广**:撰写软性文章并通过有影响力的媒体发布 - **...

    HAPROXY 1.4.15 LINUX

    当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且...

    soa 转载整理的一点资料 打印版

    4. **支持各种消息模式**:SOA支持同步和异步等多种消息传递模式,使得服务间的交互更加灵活多样。 5. **精确定义的服务契约**:服务契约明确了服务提供者和服务消费者之间的约定,包括服务的行为、输入输出格式等...

    转载linuxC经典面试题十四.pdf

    - 在命令模式下,`<o>`命令可以在光标当前行下方添加新的一行。 - 删除当前光标处的字符使用`<x>`命令。 - 重复上一次编辑操作,使用`命令。 4. 文件类型识别:根据`ls -al`命令的输出,文件类型由第一个字符...

    Java 最常见 200+ 面试题全解析:面试必备.pdf

    9. 设计模式:总结Java中常用的23种设计模式的定义、使用场景和实现方式。 10. Spring/SpringMVC:介绍Spring框架的核心特性,包括IoC容器、AOP、事务管理、Spring MVC框架等。 11. SpringBoot/SpringCloud:...

    Radmin自动登录器v3.0-多国语言绿色版-Release1-20150615

    * 先右击某条记录(或F9)填为强制代理(支持域名),并选中强制代理选项,便可对另一条记录强制进行代理连接(将忽略私有代理); * 支持鼠标滚轮; * 主菜单和右键菜单均可完成本程序的常规操作;记录窗格的右键菜单...

    Radmin自动登录器v3.0

    * 先右击某条记录(或F9)填为强制代理(支持域名),并选中强制代理选项,便可对另一条记录强制进行代理连接(将忽略私有代理); * 支持鼠标滚轮; * 主菜单和右键菜单均可完成本程序的常规操作;记录窗格的右键菜单...

    Java工程师新人入门书籍推荐

    - 《漫谈设计模式:从面向对象开始》:介绍了设计模式,对于软件设计至关重要,尤其是单例、工厂和代理模式。 - 《Spring 3.0就这么简单》:适合初学者快速掌握Spring框架的入门书籍。 - 《Java并发编程实战》:...

    大学生毕业公司实习报告.docx

    市场规范化意味着证券业对高质量资讯的需求增加,同时要求资讯更加专业化,以服务于投资者,尤其是代理投资服务和自营决策。 2. **证券资讯行业的发展**:自1994年深圳巨灵推出首套证券资讯系统以来,证券资讯业...

    Spring-Security-3应用的11个步骤.docx

    2. **方法安全** - 使用AOP(面向切面编程)模式实现安全代理,可以对方法调用进行安全控制。Spring Security 还提供了一种表达式语言,允许在配置中定义访问规则,实现对Web和方法访问的灵活控制。 **配置Spring ...

    日本贴片机操作手册,pdf文档

    - **注意事项**:在产品移设到海外工厂或转卖时,必须事先与富士机械制造株式会社或代理商联系,否则可能无法获得备用部件或维修保养服务。 综合以上内容,手册涵盖了高速复合型贴片机XPF从安装、使用、设定、到...

    samba的编译安装20160615_1154.7z

    samba4.1.6源代码部署及配置 (2014-04-04 09:41:00)转载 2016/6/14 15:23 由于ubuntu14.04.4麒麟版本使用: sudo apt-get install samba安装的samba是:V4.3.9 共享文件时ubuntu上的samba V4.3.9会出错(崩溃)。 ...

    C1000实验指导手册

    - **版权说明**:手册版权属于长光科技有限公司,未经允许不得转载或复制。 - **版本更新**:手册内容可能会随产品版本升级而更新。 ### 3. 操作指南 #### 3.1 命令行格式约定 - **命令关键字**:使用加粗字体...

    2017-2018年新型城镇化4.0研究报告:培育特色·成就小镇.pdf

    - 报告第五章对小镇的主要融资模式和融资工具进行了介绍,并提供了融资规划的相关建议。 6. 国内外特色小镇案例研究 - 报告第三章对国外和国内的特色小镇案例进行了比较研究,如法国的格拉斯小镇、硅谷的帕罗奥多...

    流光4.71 for.zip

    而近期的Webcrack以及Xavior则都具备从代理服务器端进行探测的功能,我认为这应该是在线探测的一个方向——安全第一嘛——基于此想法,我对流光在探测中会留下的记录进行试验:对一位网管朋友的WINDOWS2000 Beta3 ...

Global site tag (gtag.js) - Google Analytics