fix:代码添加注释 与 优化

上级 257e9695
...@@ -18,17 +18,24 @@ import com.study.design.pay.factory.StrategyFactory; ...@@ -18,17 +18,24 @@ import com.study.design.pay.factory.StrategyFactory;
* @date : 2023/7/29 09:22 * @date : 2023/7/29 09:22
*/ */
public class StrategyFacade { public class StrategyFacade {
// 定义一个map,将对应关系提前初始化好。
// 双十一的时候,有大量的用户进行下单(千万级),就会造成千万级的pay接口的调用。
// 很可惜,这部分代码里边有两个 new 关键字(new PayContext(payStrategy) 和 new AddFuncDecorator)。 /**
// 如果瞬时见。有几十万的并发进来,那么会创建几十万个 context对象和 addFunc对象,造成 年轻代的eden区的频繁对象创建 * 定义一个map,将对应关系提前初始化好。
// 虽然说调用完就进行了对象的垃圾收集,但是这么多的访问对象进来会造成,minorgc。 * 双十一的时候,有大量的用户进行下单(千万级),就会造成千万级的pay接口的调用。
// 1. 单例模式吗?PayContext创建是基于payStrategy,不止一种paycontext啊,用单例不行呀。 AddFuncDecorator 是基于PayContext * 很可惜,这部分代码里边有两个 new 关键字(new PayContext(payStrategy) 和 new AddFuncDecorator)。
// 创建的,PayContext 不止一种,AddFuncDecorator 也不止一种。 * 如果瞬时见。有几十万的并发进来,那么会创建几十万个 context对象和 addFunc对象,造成 年轻代的eden区的频繁对象创建
// 2. 享元模式。享元模式是单例模式的一种思想升级。单例模式,针对的是同一种对象,没有任何不同的细节。而享元模式,针对多个对象。 * 虽然说调用完就进行了对象的垃圾收集,但是这么多的访问对象进来会造成,minorgc。
// 多个对象:同一种class,但是里边的属性有些许不同。PayContext是同一种对象吧?是的; PayContext 是不是有细节上的不同呢?是的, * 1. 单例模式吗?PayContext创建是基于payStrategy,不止一种paycontext啊,用单例不行呀。 AddFuncDecorator 是基于PayContext
// payStrategy不同; 那么我们是否可以知道这个PayContext的种类数量呢?是的,目前有三种。 享元模式能够对这可控数量的有不同细节的 * 创建的,PayContext 不止一种,AddFuncDecorator 也不止一种。
//同一种class对象进行共享,保证我们的程序不频繁的创建对象。 * 2. 享元模式。享元模式是单例模式的一种思想升级。单例模式,针对的是同一种对象,没有任何不同的细节。而享元模式,针对多个对象。
* 多个对象:同一种class,但是里边的属性有些许不同。PayContext是同一种对象吧?是的; PayContext 是不是有细节上的不同呢?是的,
* payStrategy不同; 那么我们是否可以知道这个PayContext的种类数量呢?是的,目前有三种。 享元模式能够对这可控数量的有不同细节的
* 同一种class对象进行共享,保证我们的程序不频繁的创建对象。
*
* @param payBody
* @return
*/
public static Boolean pay(PayBody payBody) { public static Boolean pay(PayBody payBody) {
//获取我们的 策略枚举 //获取我们的 策略枚举
StrategyEnum strategyEnum = getStrategyEnum(payBody.getType()); StrategyEnum strategyEnum = getStrategyEnum(payBody.getType());
...@@ -38,7 +45,7 @@ public class StrategyFacade { ...@@ -38,7 +45,7 @@ public class StrategyFacade {
//获取我们的策略对象 //获取我们的策略对象
PayStrategy payStrategy = StrategyFactory.getPayStrategy(strategyEnum); PayStrategy payStrategy = StrategyFactory.getPayStrategy(strategyEnum);
//生成我们的策略上下文 //生成我们的策略上下文
PayContext context = new PayContext(payStrategy); // TO DO PayContext context = new PayContext(payStrategy);
// 装饰一下 context,。立马多了一个功能 // 装饰一下 context,。立马多了一个功能
// 我看这行代码啊,就不顺眼。代理模式搞他。 // 我看这行代码啊,就不顺眼。代理模式搞他。
AddFuncDecorator addFuncDecorator = (AddFuncDecorator) AddFuncFactory.getAddFunc(context); AddFuncDecorator addFuncDecorator = (AddFuncDecorator) AddFuncFactory.getAddFunc(context);
...@@ -46,6 +53,12 @@ public class StrategyFacade { ...@@ -46,6 +53,12 @@ public class StrategyFacade {
return addFuncDecorator.execute(payBody); return addFuncDecorator.execute(payBody);
} }
/**
* 根据type获取测罗枚举
*
* @param type
* @return
*/
private static StrategyEnum getStrategyEnum(int type) { private static StrategyEnum getStrategyEnum(int type) {
switch (type) { switch (type) {
case 0: case 0:
......
...@@ -16,7 +16,10 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -16,7 +16,10 @@ import java.util.concurrent.ConcurrentHashMap;
*/ */
public class StrategyFactory { public class StrategyFactory {
//思想升级之后的享元,模式了。 /**
* 单例模式
* 思想升级之后的享元,模式了
*/
private static final Map<String, PayStrategy> strategyMaps = new ConcurrentHashMap(); private static final Map<String, PayStrategy> strategyMaps = new ConcurrentHashMap();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册