java动态代理:static-proxy 静态代理 全代码模拟

ch01-static-proxy 静态代理

模拟:模拟一个用户购买u盘的行为

客户端类:用户

代理类:商家,代理某个品牌的u盘。

目标类:厂家,某个品牌的u盘

三者的关系: 用户(客户端)—> 商家(代理)—> 厂家(目标)

商家和厂家都是卖u盘的,他们完成的功能是一致的,都是卖u盘。

卖U盘,是一个操作,这个操作,就对应着一个方法

要想表示,一个类,有什么功能,是通过接口来表示的。

实现步骤:

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

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

  3. 创建商家,就是代理,也需要实现1步骤中的接口。

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

代理类完成的功能:

  1. 目标类中方法的调用

  2. 功能增强

0.代码

在这里插入图片描述


ch01-static-proxy:静态代理, 代理类是手工创建的, 代理的目标类是固定的。

实现步骤:
	 1. 创建一个接口,定义卖u盘的方法, 表示你的厂家和商家做的事情。
	 2. 创建厂家类,实现1步骤的接口
	 3. 创建商家,就是代理,也需要实现1步骤中的接口。
	 4. 创建客户端类,调用商家的方法买一个u盘。

1.客户端 com.wenqidao.client

用户 ShopClient.java
package com.wenqidao.a_client;

import com.wenqidao.b_shops.TaoBao;
import com.wenqidao.b_shops.WeiShang;

/*
    @author wenqidao
    @date 2021/2/17 下午10:01
*/
public class ShopClient {
    public static void main(String[] args) {
        //------------------------------------------
        //创建对象:创建代理类对象:代理类 TaoBao
        TaoBao taoBao = new TaoBao();
        //调用方法:通过代理类对象,购买U盘(包含方法增强)
        float priceTaobao = taoBao.sell(1000);
        //结果
        System.out.println("您通过淘宝,购买了U盘,U盘单价为" + priceTaobao);

        System.out.println("----------------------------------------");
        //创建对象:创建代理类对象:代理类 TaoBao
        WeiShang weiShang = new WeiShang();
        //调用方法:通过代理类对象,购买U盘(包含方法增强)
        float priceWeishang = weiShang.sell(1);
        //结果
        System.out.println("您通过微商,购买了U盘,U盘单价为" + priceWeishang);

    }
}

2.商家 com.wenqidao.shops

淘宝 TaoBao.java
package com.wenqidao.b_shops;

import com.wenqidao.c_factories.KingstonFactory;
import com.wenqidao.d_service.USBSell;

/*
    @author wenqidao
    @date 2021/2/17 下午10:01
*/

//TaoBao是一个商家,代理金士顿U盘的销售
public class TaoBao implements USBSell {
    //成员变量:声明一个变量,表示taobao代理的厂家具体是谁
    private KingstonFactory factory = new KingstonFactory();

    //成员方法:实现销售U盘的功能
    @Override
    public float sell(int amount) {
        //调用目标类方法:购买U盘,向厂家发送订单,告诉厂家,我买了U盘,通知厂家发货
        float price = factory.sell(amount);

        //增强功能,就是代理类在完成调用目标类方法之后,增强的功能
        //增强目标类方法1:加价功能
        price = price + 25;
        //增强目标类方法2:返回优惠券
        System.out.println("淘宝赠送给您一张10元的优惠券");

        return price;
    }
}

微商 WeiShang.java
package com.wenqidao.b_shops;

import com.wenqidao.c_factories.KingstonFactory;
import com.wenqidao.d_service.USBSell;

/*
    @author wenqidao
    @date 2021/2/17 下午10:05
*/

//WeiShang 是一个商家,代理金士顿U盘的销售
public class WeiShang implements USBSell {
    //成员变量:声明一个变量,表示 WeiShang 代理的厂家具体是谁
    private KingstonFactory factory = new KingstonFactory();

    //成员方法:实现销售U盘的功能
    @Override
    public float sell(int amount) {
        //调用目标类方法:购买U盘,向厂家发送订单,告诉厂家,我买了U盘,通知厂家发货
        float price = factory.sell(amount);

        //增强功能,就是代理类在完成调用目标类方法之后,增强的功能
        //增强目标类方法1:加价功能
        price = price + 25;
        //增强目标类方法2:返回优惠券
        System.out.println("微商赠送给您一张20元的优惠券");

        return price;
    }
}

3.厂家 com.wenqidao.factories

金士顿 KingstonFactory.java

表示金士顿厂家

package com.wenqidao.c_factories;

/*
    @author wenqidao
    @date 2021/2/17 下午10:10
*/

// 表示功能,厂家和商家都要完成的功能
public class KingstonFactory {
    //目标类的方法

    //定义方法 参数 amount:表示一次购买的数量,暂时不用
    //返回值表示一个u盘的价格。
    public float sell(int amount) {
        float price;
        if (amount > 0 && amount < 100) {
            price = 85.0f;
        } else {
            price = 75.0f;
        }
        return price;
    }
}

4.接口功能 com.wenqidao.service

功能接口 UsbSell.java
package com.wenqidao.d_service;

/*
    @author wenqidao
    @date 2021/2/17 下午10:07
*/
public interface USBSell {
    float sell(int amount);
}

5.运行结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值