代理模式:代码构建我们的奶茶王朝
作者:互联网
第一家奶茶店
奶茶现在这么受大众的欢迎,那这么好赚钱的门路肯定不能错过。
那如果想开一家奶茶店需要什么步骤呢,经过一番观察,前期可能需要购买设备、原料、店铺、人工等等。
那我们可以用代码来实现我们的第一家奶茶店
- 定义一个奶茶店接口
public interface IBubbleShop {
// 店铺
void shop();
// 原料
void ingredient();
// 员工
void staff();
// 设备
void facility();
// 正常营业
void normalBusiness();
}
- 奶茶店实现类
public class BubbleShop implements IBubbleShop {
// 奶茶店名称
private String name;
public BubbleShop(String name){
this.name = name;
}
@Override
public void shop() {
System.out.println("租店铺!");
}
@Override
public void ingredient() {
System.out.println("购买原材料!");
}
@Override
public void staff() {
System.out.println("雇员工!");
}
@Override
public void facility() {
System.out.println("购买设备!");
}
@Override
public void normalBusiness() {
System.out.println("二杠杆奶茶点开始营业了");
System.out.println("卖出一杯奶茶!");
}
}
- 开业
public class BubbleShopMain {
public static void main(String[] args) {
// 定义一个名叫二杠杆的奶茶店
IBubbleShop bubbleShop = new BubbleShop("二杠杠");
// 前期准备
bubbleShop.shop();
bubbleShop.facility();
bubbleShop.ingredient();
bubbleShop.staff();
// 开始营业
bubbleShop.normalBusiness();
}
}
/**
* 运行结果:
*
* 租店铺!
* 购买设备!
* 购买原材料!
* 雇员工!
* 二杠杆奶茶点开始营业了
* 卖出一杯奶茶!
*/
通过以上步骤,我们的“二杠杠“奶茶店终于开业了!
经过了一年的努力,我们的奶茶店火了。那我们肯定不满足一家店的带来的收益,我们要做大,那就开启品牌加盟模式。
品牌加盟
由于“二杠杠”奶茶店的名气,很多商家想加盟我们的品牌。那前期为了推广,那就不设置加盟条件了,直接让大家使用名气,毕竟韭菜得先养才好割。
- 定义一个代理商家
public class BubbleShopProxy implements IBubbleShop {
private IBubbleShop iBubbleShop;
public BubbleShopProxy(IBubbleShop iBubbleShop){
this.iBubbleShop = iBubbleShop;
}
@Override
public void shop() {
this.iBubbleShop.shop();
}
@Override
public void ingredient() {
this.iBubbleShop.ingredient();
}
@Override
public void staff() {
this.iBubbleShop.staff();
}
@Override
public void facility() {
this.iBubbleShop.facility();
}
@Override
public void normalBusiness() {
System.out.println("加盟店准备就绪");
this.iBubbleShop.normalBusiness();
}
}
- “二杠杠“加盟店开业
public class BubbleShopMain {
public static void main(String[] args) {
IBubbleShop erganggang = new BubbleShop("二杠杠");
IBubbleShop proxy = new BubbleShopProxy(erganggang);
// 加盟店的前期准备
proxy.shop();
proxy.facility();
proxy.ingredient();
proxy.staff();
// 加盟店开始营业
proxy.normalBusiness();
}
}
/**
* 运行结果:
*
* 租店铺!
* 购买设备!
* 购买原材料!
* 雇员工!
* 加盟店准备就绪
* 二杠杆奶茶点开始营业了
* 卖出一杯奶茶!
*/
以上代码我们实现了商家的加盟。
又经过了一年,“二杠杠”奶茶店更火了。加盟的商家更多了。那我们开始提出我们的加盟条件了,需要缴纳10w的加盟费,每个商家卖出一杯奶茶我们抽成2块钱(是不是很资本家)。
- 对于加盟的条件我们新增一个接口
public interface ProxyCondition {
// 加盟费
void initalFee();
// 抽成
void cut();
}
- 新的加盟条件发布后,也有新的商家加盟了。
我们来实现一个新加盟商家的类
public class BubbleShopProxy implements IBubbleShop, ProxyCondition {
private IBubbleShop iBubbleShop;
public BubbleShopProxy(IBubbleShop iBubbleShop){
this.iBubbleShop = iBubbleShop;
}
@Override
public void shop() {
this.initalFee();
this.iBubbleShop.shop();
}
@Override
public void ingredient() {
this.iBubbleShop.ingredient();
}
@Override
public void staff() {
this.iBubbleShop.staff();
}
@Override
public void facility() {
this.iBubbleShop.facility();
}
@Override
public void normalBusiness() {
System.out.println("加盟店准备就绪");
this.iBubbleShop.normalBusiness();
this.cut();
}
@Override
public void initalFee() {
System.out.println("缴纳10w加盟费");
}
@Override
public void cut() {
System.out.println("一杯奶茶抽成2块钱");
}
}
/**
* Main方法不需要更改。
* 运行结果:
*
* 缴纳10w加盟费
* 租店铺!
* 购买设备!
* 购买原材料!
* 雇员工!
* 加盟店准备就绪
* 二杠杆奶茶点开始营业了
* 卖出一杯奶茶!
* 一杯奶茶抽成2块钱
*/
新的加盟条件发布后。我们的收益又提升了。
二杠杠奶茶店公司
由于“二杠杠”奶茶店太火了,加盟的人很多。所以我们需要开一家公司,公司专门处理加盟的事务。
再此我们先引人一个概念,动态代理。动态代理指的是通过代理的接口来动态生成代理类。
目前JDK实现动态代理的方式有两种。基于JDK的动态代理及基于CGILB的动态代理。
以下拿JDK的动态代理为例。实现JDK动态代理主要包括两步
- 创建一个类实现InvocationHandler接口,且必须实现invoke方法。
- 通过Proxy.newProxyInstance初始化一个代理,最后通过代理调用具体方法。
开设一个公司就好比实现动态代理。接下来回到我们的奶茶店上。
- 创建我们的“二杠杠”公司
public class BubbleShopIH implements InvocationHandler {
// 被代理的实例
Object obj;
public BubbleShopIH(Object obj) {
this.obj = obj;
}
// 调用被代理的方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("shop")) {
System.out.println("缴纳10w加盟费");
}
if (method.getName().equals("normalBusiness")) {
System.out.println("加盟店准备就绪");
}
Object result = method.invoke(this.obj, args);
if (method.getName().equals("normalBusiness")) {
System.out.println("一杯奶茶抽成2块钱");
}
return result;
}
}
- 新的商家通过公司进行加盟
public class BubbleShopIHMain {
public static void main(String[] args) {
IBubbleShop bubbleShop = new BubbleShop("二杠杠");
InvocationHandler handler = new BubbleShopIH(bubbleShop);
// 动态产生一个代理者
IBubbleShop proxy = (IBubbleShop) Proxy.newProxyInstance(bubbleShop.getClass().getClassLoader(),
new Class[]{IBubbleShop.class},
handler);
proxy.shop();
proxy.facility();
proxy.ingredient();
proxy.staff();
proxy.normalBusiness();
}
}
/**
* 运行结果:
*
* 缴纳10w加盟费
* 租店铺!
* 购买设备!
* 购买原材料!
* 雇员工!
* 加盟店准备就绪
* 二杠杠奶茶点开始营业了
* 卖出一杯奶茶!
* 一杯奶茶抽成2块钱
*/
到此我们创建了自己的公司,有了专门的流程(代理类的invoke方法),我们的奶茶王朝已经建立玩完成。
总结
1.代理包含两种方式:静态代理和动态代理(开设公司前为静态代理)
2.代理模式是应用非常广泛的模式。Spring AOP的实现原理便是代理模式。
希望通过奶茶店的方式可以给你一个理解的思路。如果你觉得文章不错,可以点个赞。你的支持是我前进的动力。
标签:IBubbleShop,void,public,构建,奶茶,Override,iBubbleShop,代码 来源: https://blog.csdn.net/qq_41831553/article/details/118054474