Skip to content

复杂、繁杂、庞杂:图解七种代码耦合类型

原文 PDF:[星标]复杂、繁杂、庞杂:图解七种代码耦合类型.pdf(已转文字 + 提取配图)

正文

2022/6/12 21:42

IT JAVA 2021-12-11 10:05

#Java 54 # 8

JAVA

JAVA

java_fro nt

      1 

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 1/20

2022/6/12 21:42

        2 

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 2/20

2022/6/12 21:42

2.1

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 3/20

2022/6/12 21:42

AB

shardingKey

2.2

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 4/20

2022/6/12 21:42

ApolloAJSON

public class ApolloConfig {

   @Value("${apollo.json.config}")

   private String jsonConfig;

}

public class JsonConfig {

   public int type;


   public boolean switchOpen;

}

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 5/20

2022/6/12 21:42

public class OrderServiceImpl {

             public void createOrder() {


                    String jsonConfig = apolloConfig.getJsonConfig();


                    JsonConfig config = JSONUtils.toBean(jsonConfig, JsonConfig.class);




             if(config.getType() == TypeEnum.ORDER.getCode() && config.isSwitchOpen()) {




                    createBizOrder();


             }




   }

}

public class PayServiceImpl {

             public void createPayOrder() {


                    String jsonConfig = apolloConfig.getJsonConfig();


                    JsonConfig config = JSONUtils.toBean(jsonConfig, JsonConfig.class);




             if(config.getType() == TypeEnum.PAY.getCode() && config.isSwitchOpen()) {




                    createBizPayOrder();


             }




   }

}

2.3

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 6/20

2022/6/12 21:42

ApolloA

public class ApolloConfig {

   @Value("${apollo.type.config}")

   private int typeConfig;

}

public class OrderServiceImpl {

             public void createOrder() {




             if(apolloConfig.getTypeConfig() == TypeEnum.ORDER.getCode()) {


                    createBizOrder();




             }




   }

}

public class PayServiceImpl {

             public void createPayOrder() {

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 7/20

2022/6/12 21:42

             if(apolloConfig.getTypeConfig() == TypeEnum.PAY.getCode()) {


                    createBizPayOrder();




             }




   }

}

2.4

BAA

B

public class ModuleA {

             private int type;

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 8/20

2022/6/12 21:42

               private int type;




        }

public class A {

private B b = new B();

public void methondA(int type) {

      ModuleA moduleA = new ModuleA(type);


      b.methondB(moduleA);




   }

}

public class B {

public void methondB(ModuleA moduleA) {

      if(moduleA.getType() == 1) {




             action1();


      } else if(moduleA.getType() == 2) {




             action2();


      }




   }

}

2.5

JAVA

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 9/20

2022/6/12 21:42

2.6

JAVA

2.7

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 10/20

2022/6/12 21:42

if else

ABCA9

9B88C

77

public class OrderServiceImpl implements OrderService {

             @Resource


             private OrderMapper orderMapper;




             @Override




             public void createOrder(OrderBO orderBO) {




             if (null == orderBO) {



                  throw new RuntimeException("  ");




             }




             if (OrderTypeEnum.isNotValid(orderBO.getType())) {




                  throw new RuntimeException("  ");

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 11/20

2022/6/12 21:42

             }




             // A




             if (OrderTypeEnum.A_TYPE.getCode().equals(orderBO.getType())) {




             orderBO.setPrice(orderBO.getPrice() * 0.9);




             if (orderBO.getWeight() > 9) {




              throw new RuntimeException("                     ");




                    }




                    orderBO.setRefundSupport(Boolean.FALSE);




             }




             // B




             else if (OrderTypeEnum.B_TYPE.getCode().equals(orderBO.getType())) {




             orderBO.setPrice(orderBO.getPrice() * 0.8);




             if (orderBO.getWeight() > 8) {




              throw new RuntimeException("                     ");




                    }




                    orderBO.setRefundSupport(Boolean.TRUE);




             }




             // C




             else if (OrderTypeEnum.C_TYPE.getCode().equals(orderBO.getType())) {




             orderBO.setPrice(orderBO.getPrice() * 0.7);




             if (orderBO.getWeight() > 7) {




              throw new RuntimeException("                     ");




                    }




                    orderBO.setRefundSupport(Boolean.TRUE);




             }




             // 




             OrderDO orderDO = new OrderDO();


             BeanUtils.copyProperties(orderBO, orderDO);


             orderMapper.insert(orderDO);




   }

}

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 12/20

2022/6/12 21:42

2.7.1

//

public interface DiscountStrategy {

   public void discount(OrderBO orderBO);

}

// A

@Component

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 13/20

2022/6/12 21:42

public class TypeADiscountStrategy implements DiscountStrategy {

             @Override




             public void discount(OrderBO orderBO) {




             orderBO.setPrice(orderBO.getPrice() * 0.9);




   }

}

// B

@Component

public class TypeBDiscountStrategy implements DiscountStrategy {

             @Override




             public void discount(OrderBO orderBO) {




             orderBO.setPrice(orderBO.getPrice() * 0.8);




   }

}

// C

@Component

public class TypeCDiscountStrategy implements DiscountStrategy {

             @Override




             public void discount(OrderBO orderBO) {




             orderBO.setPrice(orderBO.getPrice() * 0.7);




   }

}

//

@Component

public class DiscountStrategyFactory implements InitializingBean {

   private Map<String, DiscountStrategy> strategyMap = new HashMap<>();




             @Resource


             private TypeADiscountStrategy typeADiscountStrategy;


             @Resource


             private TypeBDiscountStrategy typeBDiscountStrategy;


             @Resource


             private TypeCDiscountStrategy typeCDiscountStrategy;




             public DiscountStrategy getStrategy(String type) {


                    return strategyMap.get(type);




             }

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 14/20

2022/6/12 21:42

               @Override

public void afterPropertiesSet() throws Exception {

      strategyMap.put(OrderTypeEnum.A_TYPE.getCode(), typeADiscountStrategy);


      strategyMap.put(OrderTypeEnum.B_TYPE.getCode(), typeBDiscountStrategy);


      strategyMap.put(OrderTypeEnum.C_TYPE.getCode(), typeCDiscountStrategy);




   }

}

//

@Component

public class DiscountStrategyExecutor {

   private DiscountStrategyFactory discountStrategyFactory;

public void discount(OrderBO orderBO) {

      DiscountStrategy discountStrategy = discountStrategyFactory.getStrategy(orderBO.ge



      if (null == discountStrategy) {




       throw new RuntimeException("            ");




      }


      discountStrategy.discount(orderBO);




   }

}

2.7.2

//

public interface CreateOrderService {

   public void createOrder(OrderBO orderBO);

}

//

public abstract class AbstractCreateOrderFlow {

@Resource

private OrderMapper orderMapper;

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 15/20

2022/6/12 21:42

             public void createOrder(OrderBO orderBO) {




                // 




             if (null == orderBO) {



                  throw new RuntimeException("");




             }




             if (OrderTypeEnum.isNotValid(orderBO.getType())) {




                  throw new RuntimeException("");




             }




             // 




             discount(orderBO);




             // 




             weighing(orderBO);




             // 




             supportRefund(orderBO);




             // 




                    OrderDO orderDO = new OrderDO();




                    BeanUtils.copyProperties(orderBO, orderDO);


                    orderMapper.insert(orderDO);


             }



             public abstract void discount(OrderBO orderBO);




             public abstract void weighing(OrderBO orderBO);




   public abstract void supportRefund(OrderBO orderBO);

}

//

@Service

public class CreateOrderFlow extends AbstractCreateOrderFlow {

             @Resource


             private DiscountStrategyExecutor discountStrategyExecutor;


             @Resource


             private ExpressStrategyExecutor expressStrategyExecutor;


             @Resource


             private RefundStrategyExecutor refundStrategyExecutor;




               @Override
                                             16/20

               public void discount(OrderBO orderBO) {




                      discountStrategyExecutor.discount(orderBO);


               }



               @Override


               public void weighing(OrderBO orderBO) {

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA

2022/6/12 21:42

             public void weighing(OrderBO orderBO) {




                    expressStrategyExecutor.weighing(orderBO);


             }



             @Override




             public void supportRefund(OrderBO orderBO) {




             refundStrategyExecutor.supportRefund(orderBO);




   }

}

2.7.3

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 17/20

2022/6/12 21:42

Y

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 18/20

2022/6/12 21:42

                                               3

JAVA

JAVA

java_fro nt

#Java 54

                                               ATAM

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 19/20

2022/6/12 21:42

()

Pythonlx

Verilog

IC

https://mp.weixin.qq.com/s/xLpb6gQ_BLoRMs6QbBjCRA 20/20

配图

第 3 页 — 001-p03.jpeg

001-p03.jpeg

第 4 页 — 002-p04.jpeg

002-p04.jpeg

第 5 页 — 003-p05.jpeg

003-p05.jpeg

第 6 页 — 004-p06.jpeg

004-p06.jpeg

第 7 页 — 005-p07.jpeg

005-p07.jpeg

第 8 页 — 006-p08.jpeg

006-p08.jpeg

第 9 页 — 007-p09.jpeg

007-p09.jpeg

第 10 页 — 008-p10.jpeg

008-p10.jpeg

第 11 页 — 009-p11.jpeg

009-p11.jpeg

第 13 页 — 010-p13.jpeg

010-p13.jpeg

第 17 页 — 011-p17.jpeg

011-p17.jpeg

第 18 页 — 012-p18.jpeg

012-p18.jpeg

Released under the MIT License.