千家信息网

Java开闭原则实例分析

发表于:2024-10-21 作者:千家信息网编辑
千家信息网最后更新 2024年10月21日,这篇文章主要介绍"Java开闭原则实例分析"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java开闭原则实例分析"文章能帮助大家解决问题。定义开闭原则( Op
千家信息网最后更新 2024年10月21日Java开闭原则实例分析

这篇文章主要介绍"Java开闭原则实例分析"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"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开闭原则实例分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

支付 原则 类型 分析 成功 正在 测试 实例 实例分析 不同 方案 知识 案例 结果 行业 需求 方来 开放 耦合 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 全网云电商软件开发商 明日方舟数据库 山东省浪潮服务器销售地址在哪里 中国8个一线城市金融数据库 sql数据库world文档导入 上海数据库公司的 现在汽车采用了哪些网络技术 三级网络技术的第二大题 第七节 网络安全 说课稿 mc服务器目录怎么打开 互联网新科技的发展和应用 什么软件提高网络安全 存储与软件开发有关系吗 应用数据库在哪里设置 服务器配件渠道竞争分析 服务器系统默认不开远程桌面吗 数据库获取系统时间 数据库怎么创表 我的世界雾山服务器主播哔哩哔哩 奉贤区管理软件开发值得推荐 辽宁潮流软件开发推广 上海数据库公司的 客户端无法连接数据库日志 plc仿真软件开发 数据库版本是不是向下兼容 服务器查询网址 用友u8人员档案数据库 长春先进网络技术咨询排名靠前 网络安全和发展要同步推进 学软件开发还是模具设计
0