ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

最全介绍的代理模式---第一节

2021-12-16 11:02:34  阅读:339  来源: 互联网

标签:U盘 对象 最全 第一节 代理 --- 厂家 目标 public


一、什么是代理?

其实生活中有很多例子

(1)一件产品,生产出来后,需要代理商来销售它,我们作为客户,会通过代理商来买产品,代理商就是我们的代理对象,产品为被代理对象(目标对象)

(2)租房子(中介就是代理对象)等等

二、为什么要代理呢?

(1)代理更专业,也更方便

如:你出国留学,你不会很便利地直接去国外与学校直接交谈,但是作为学校地招生代理,有着非常专业地流程,对学校也很了解,你就可以通过招生代理直接了解学校,不用很麻烦地出国。

(2)有时候目标对象对于你来说没有访问权限,这时就需要中间代理对象来做中间人代替你访问。

三、代理模式

1、概念:当一个对象不能直接使用,可以在客户端和目标对象直接创建一个中介,这个中介就是代理,也就是喂目标对象提供一个替身。

2、作用

(1)访问控制:在代理中,控制是否可以调用目标对象地方法

(2)功能增强:可以在目标对象实现地基础上,增强额外地功能操作

如:代理商可以增加商品价格,为自己博得利润,或者向客户发放优惠券。

3、被代理的对象

远程对象,或者创建开销大的对象,或者需要安全控制的对象,等等。

4、分类

(1)静态代理模式:代理类是手工实现的Java文件,同时代理的目标对象是规定的。

(2)动态代理模式:在程序执行过程中,使用JDK的反射机制,避免静态代理的缺点。

JDK代理模式:下节会介绍

Cglib代理模式:下节会介绍

四、静态代理

1、介绍

	代理类是手工实现的Java文件,同时代理的目标对象是规定的。使用时,被代理对象(目标对象)与代理对象都必须实现相同的接口或者继承相同的父类。

2、特点

(1)代理类是自己手工实现的,自己创建一个Java类,表示代理类

(2)你代理的目标对象是确定的

(3)被代理对象(目标对象)与代理对象都必须实现相同的接口或者继承相同的父类

3、优缺点

优点

1)实现简单,容易理解;

2)在不修改目标对象的功能的前提下,能够通过代理对象对目标对象实现功能扩展/增强

缺点:当你的项目中,目标类和代理类很多的时候,有以下的缺点

1)当目标类增加了,代理类可能也需要成倍的增加,大力类数量过多

2)当你的接口中功能增加了,或者修改了,会影响众多的实现类,厂家类、代理类都需要修改。

4、模拟一个用户购买U盘的行为

产品U盘UsbSell,目标对象:UsbKingFactory,代理对象:Taobao,客户终端:ShopMain

  • 实现步骤:

(1)创建一个接口,定义卖U盘的方法,表示你的厂家和商家做的事情

(2)创建厂家类,实现(1)步骤的接口

(3)创建商家,就是代理,也需要实现(1)中的接口

(4)创建客户端类,调用商家的方法买一个U盘。

  • 其中,代理类完成的功能:

(1)目标类中方法的实现

(2)功能增强
在这里插入图片描述

  • 代码:

(1)UsbSell接口

// 表示功能的厂家,或者商家要完成的功能
public interface UsbSell {
    // 定义方法
    // amount: 表示一次购买的数量,暂时不用
    // 返回表示一个U盘的价格
    float sell(int amount);

    // 可以定义多个其他的方法
}

(2)目标对象:UsbKingFactory类

// 目标类:金士顿厂家,不接用户的单独购买
public class UsbKingFactory implements UsbSell {
    @Override
    public float sell(int amount) {
        // 一个128G的U盘85元
        // 后期可以根据amount,可以实现不同的价格,比如1000个,单价85元,
        return 85.0f;
    }
}

(3)代理对象:Taobao类

// 淘宝是个商家,代理金士顿U盘的销售
public class Taobao implements UsbSell {
    //声明 商家代理的厂家具体是谁
    private UsbKingFactory factory = new UsbKingFactory();
    @Override
    // 实际销售U盘的功能
    public float sell(int amount) {
        // 向厂家发送订单,告诉厂家,我买了U盘,厂家发货
        float price = factory.sell(amount);//厂家的价格
        // 商家 需要加价,也就是dialing要增加价格
        // 这里相对于目标对象,就增强了功能
        // 代理类 在完成目标类方法调用后,增强了功能
        price += 25;
        // 在目标类的方法调用后。你做的其他功能,都是增强功能,如发放优惠券
        System.out.println("淘宝商家,给你返回一个优惠券,或者红包");
        return price;
    }
}

(4)客户终端:ShopMain

public class ShopMain {
    public static void main(String[] args) {
        // 创建代理商家的 Taobao 对象
        Taobao taobao = new Taobao();
        float price = taobao.sell(1);
        System.out.println("通过淘宝的商家,购买U盘单价:"+price);
    }
}

标签:U盘,对象,最全,第一节,代理,---,厂家,目标,public
来源: https://blog.csdn.net/qq_39743001/article/details/121969755

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有