fix:装饰器模式和享元模式

上级 6a331d51
...@@ -3,22 +3,39 @@ package com.study.design.pay.additionalDecorator; ...@@ -3,22 +3,39 @@ package com.study.design.pay.additionalDecorator;
import com.study.design.pay.pojo.PayBody; import com.study.design.pay.pojo.PayBody;
import com.study.design.pay.strategyContext.AbstractPayContext; import com.study.design.pay.strategyContext.AbstractPayContext;
/**
* 装饰器抽象类
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/7/30 09:24
*/
public abstract class AbstractAddFuncDecorator extends AbstractPayContext { public abstract class AbstractAddFuncDecorator extends AbstractPayContext {
// 这是我们的装饰器类。专门干装修的。 专门添加新功能的(平台币,红包) /**
// 装饰的是谁啊? 我作为一个称职的装饰器,我必须得知道装饰的是谁,不然我咋干活儿啊。 * 这是我们的装饰器类。专门干装修的。 专门添加新功能的(平台币,红包)
* 装饰的是谁啊? 我作为一个称职的装饰器,我必须得知道装饰的是谁,不然我咋干活儿啊。
*/
private AbstractPayContext abstractPayContext = null; private AbstractPayContext abstractPayContext = null;
public AbstractAddFuncDecorator(AbstractPayContext abstractPayContext) { public AbstractAddFuncDecorator(AbstractPayContext abstractPayContext) {
this.abstractPayContext = abstractPayContext; this.abstractPayContext = abstractPayContext;
} }
// 开始干活儿 /**
//1. 老活儿。 支付。但是我又不能修改支付代码,也不能修改支付逻辑。 * 老活儿。 支付。但是我又不能修改支付代码,也不能修改支付逻辑。
*
* @param payBody
* @return
*/
@Override @Override
public Boolean execute(PayBody payBody) { public Boolean execute(PayBody payBody) {
return abstractPayContext.execute(payBody); return abstractPayContext.execute(payBody);
} }
//2. 老活儿不合适,没你装饰器照样能execute。 新活儿:平台币,红包) /**
* 新活儿:平台币,红包
*
* @param payBody
*/
public abstract void additionalFunction(PayBody payBody); public abstract void additionalFunction(PayBody payBody);
} }
\ No newline at end of file
...@@ -5,19 +5,20 @@ import com.study.design.pay.strategyContext.AbstractPayContext; ...@@ -5,19 +5,20 @@ import com.study.design.pay.strategyContext.AbstractPayContext;
/** /**
* abstractPayContext 不是共享的,因为有的小伙伴选择 zfb 支付,有的小伙伴选择wx支付,等等。。。 * abstractPayContext 不是共享的
* *
* @author : qinyingjie * @author : qinyingjie
* @version : 2.2.0 * @version : 2.2.0
* @date : 2022/9/27 02:20 * @date : 2022/9/27 02:20
*/ */
public class AddFuncDecorator extends AbstractAddFuncDecorator { public class AddFuncDecorator extends AbstractAddFuncDecorator {
public AddFuncDecorator(AbstractPayContext abstractPayContext) { public AddFuncDecorator(AbstractPayContext abstractPayContext) {
super(abstractPayContext); super(abstractPayContext);
} }
/** /**
* 新活儿 * 复写方法:新活儿
* *
* @param payBody * @param payBody
*/ */
...@@ -30,6 +31,12 @@ public class AddFuncDecorator extends AbstractAddFuncDecorator { ...@@ -30,6 +31,12 @@ public class AddFuncDecorator extends AbstractAddFuncDecorator {
System.out.println("更新平台币成功,发送红包到用户优惠券模块成功。"); System.out.println("更新平台币成功,发送红包到用户优惠券模块成功。");
} }
/**
* 老活 新活 一起执行
*
* @param payBody
* @return
*/
@Override @Override
public Boolean execute(PayBody payBody) { // 算共享的。共享的调用逻辑 public Boolean execute(PayBody payBody) { // 算共享的。共享的调用逻辑
Boolean result = super.execute(payBody); //老活儿 Boolean result = super.execute(payBody); //老活儿
......
...@@ -7,18 +7,19 @@ import com.study.design.pay.strategyContext.PayContext; ...@@ -7,18 +7,19 @@ import com.study.design.pay.strategyContext.PayContext;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/** /**
* 工厂类 * 享元工厂类
* *
* @author : qinyingjie * @author : qinyingjie
* @version : 2.2.0 * @version : 2.2.0
* @date : 2023/7/29 09:11 * @date : 2023/7/29 09:11
*/ */
public class AddFuncFactory { public class AddFuncFactory {
// 工厂的目的是生产 AddFuncDecorator; 生产几个啊? 多个:享元 /**
// key 应该是能够和 AbstractAddFuncDecorator 做成对应的东西。 * 工厂的目的是生产 AddFuncDecorator; 生产几个啊? 多个:享元
// 这个map最多保存是三个对象。 * key 应该是能够和 AbstractAddFuncDecorator 做成对应的东西。
* 这个map最多保存是三个对象。
*/
public final static Map<PayContext, AbstractAddFuncDecorator> maps = new ConcurrentHashMap<>(); public final static Map<PayContext, AbstractAddFuncDecorator> maps = new ConcurrentHashMap<>();
public static AbstractAddFuncDecorator getAddFunc(PayContext payContext) { public static AbstractAddFuncDecorator getAddFunc(PayContext payContext) {
...@@ -28,4 +29,4 @@ public class AddFuncFactory { ...@@ -28,4 +29,4 @@ public class AddFuncFactory {
} }
return maps.get(payContext); return maps.get(payContext);
} }
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册