ch01-static-proxy 静态代理
文章目录
模拟:模拟一个用户购买u盘的行为
客户端类:用户
代理类:商家,代理某个品牌的u盘。
目标类:厂家,某个品牌的u盘
三者的关系: 用户(客户端)—> 商家(代理)—> 厂家(目标)
商家和厂家都是卖u盘的,他们完成的功能是一致的,都是卖u盘。
卖U盘,是一个操作,这个操作,就对应着一个方法
要想表示,一个类,有什么功能,是通过接口来表示的。
实现步骤:
-
创建一个接口,定义卖u盘的方法, 表示你的厂家和商家做的事情。
-
创建厂家类,实现1步骤的接口
-
创建商家,就是代理,也需要实现1步骤中的接口。
-
创建客户端类,调用商家的方法买一个u盘。
代理类完成的功能:
-
目标类中方法的调用
-
功能增强
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);
}