欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java设计模式七大原则之开闭原则详解,

来源: javaer 分享于  点击 45370 次 点评:8

Java设计模式七大原则之开闭原则详解,


目录
  • 定义
  • 案例
    • 需求
    • 方案一
    • 执行结果
    • 方案二
    • 执行结果
  • 对比分析
    • 总结

      定义

      开闭原则( Open Close Principle ),又称为OCP原则,即一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。其中,对扩展开放是针对提供方来说的,对修改关闭是针对调用方来说的。

      案例

      需求

      购买东西的时候,根据支付类型的不同使用不同的方式进行支付,当类型为1时,使用微信支付;当类型为2时,使用支付宝支付

      方案一

      定义支付类型

      /**
       * 支付类型
       * @author:liyajie
       * @createTime:2022/2/7 10:21
       * @version:1.0
       */
      public class PayType {
          int type;
      }

      定义微信支付类

      /**
       * 微信支付类
       * @author:liyajie
       * @createTime:2022/2/7 10:46
       * @version:1.0
       */
      public class WxPay extends PayType{
          WxPay(){
              super.type = 1;
          }
      }

      定义支付宝支付类

      /**
       * 支付宝支付类
       * @author:liyajie
       * @createTime:2022/2/7 10:46
       * @version:1.0
       */
      public class ZfbPay extends PayType{
          ZfbPay(){
              super.type = 2;
          }
      }

      定义支付操作类

      /**
       * @desc:
       * @author:liyajie
       * @createTime:2022/2/7 10:41
       * @version:1.0
       */
      public class Pay {
          public void pay(PayType s) {
              if (s.type == 1) {
                  wxPay(s);
              } else if (s.type == 2) {
                  zfbPay(s);
              }
          }
      
          // 微信支付
          public void wxPay(PayType r) {
              System.out.println(" 正在微信支付中---支付成功 ");
          }
      
          // 支付宝支付
          public void zfbPay(PayType r) {
              System.out.println(" 正在支付宝支付中---支付成功");
          }
      
      }

      定义测试类

      /**
       * 测试类1
       * @author:liyajie
       * @createTime:2022/2/7 10:48
       * @version:1.0
       */
      public class Test1 {
          public static void main(String[] args) {
              new Pay().pay(new WxPay());
              new Pay().pay(new ZfbPay());
          }
      }

      执行结果

      方案二

      定义支付类型基类

      /**
       * 支付类型基类
       * @author:liyajie
       * @createTime:2022/2/7 10:21
       * @version:1.0
       */
      public abstract class PayTypeNew {
      
          int type;
      
          public abstract void pay();
      }

      定义微信支付类

      /**
       * 微信支付类
       * @author:liyajie
       * @createTime:2022/2/7 10:46
       * @version:1.0
       */
      public class WxPayNew extends PayTypeNew{
          WxPayNew(){
              super.type = 1;
          }
      
          @Override
          public void pay() {
              System.out.println(" 正在微信支付中---支付成功 ");
          }
      }

      定义支付宝支付类

      /**
       * 支付宝支付类
       * @author:liyajie
       * @createTime:2022/2/7 10:46
       * @version:1.0
       */
      public class ZfbPayNew extends PayTypeNew{
          ZfbPayNew(){
              super.type = 2;
          }
      
          @Override
          public void pay() {
              System.out.println(" 正在支付宝支付中---支付成功");
          }
      }

      定义支付操作类

      /**
       * 支付操作类
       * @author:liyajie
       * @createTime:2022/2/7 10:41
       * @version:1.0
       */
      public class PayNew {
          public void pay(PayTypeNew payTypeNew) {
              payTypeNew.pay();
          }
      }

      定义测试类

      /**
       * 测试类2
       * @author:liyajie
       * @createTime:2022/2/7 10:48
       * @version:1.0
       */
      public class Test2 {
          public static void main(String[] args) {
             new PayNew().pay(new WxPayNew());
             new PayNew().pay(new ZfbPayNew());
          }
      }

      执行结果

      对比分析

      方案一,未遵守开闭原则,耦合较高,如果需求需要扩展,比如再增加一个信用卡支付,那么需要改的地方较大,风险较高

      方案二,遵守开闭原则,耦合低,扩展方便,并且也提高了代码的复用性,维护起来也很方便

      总结

      开闭原则是最基础最重要的设计原则,开闭原则可以提高复用性和可维护性

      到此这篇关于Java设计模式七大原则之开闭原则详解的文章就介绍到这了,更多相关Java开闭原则内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

      您可能感兴趣的文章:
      • Java设计模式之开闭原则精解
      • java面向对象设计原则之开闭原则示例解析
      • ocp开闭原则_动力节点Java学院整理
      • 实例讲解Java设计模式编程中的OCP开闭原则
      • 解析Java编程中设计模式的开闭原则的运用
      相关栏目:

      用户点评