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开闭原则内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java设计模式之开闭原则精解

    目录 1.什么是开闭原则? 2.违反Ocp代码案例 3.遵守Ocp代码案例 1.什么是开闭原则? 开闭原则(Open Closed Principle)是编程中最基础.最重要的设计原则. 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构建框架,用实现扩展细节. 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则. 2.违反Ocp代码案例 package c

  • ocp开闭原则_动力节点Java学院整理

    开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统. 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. Softeware entities like classes,modules and functions should be open for extension but closed for modifications. 开闭原则的含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码

  • java面向对象设计原则之开闭原则示例解析

    概念 唯一不变的是不断的变化,在软件开发中应该对需求的变化持开放态度,我们要做的就是如何将这种变化对我们现有的成果带来最小的冲击.开闭原则直接面对面向对象程序的目标扩展性和可维护性,要求对扩展开放,对修改关闭:即在不修改原有代码的情况下改变模块的行为.该原则是面向对象程序设计的总原则,也是度量程序设计的好与坏的唯一标准 实现 开闭原则的实现策略主要在面向对象的封装性和多态性的基础上,利用面向对象的其他原则完成的. 1.使用多态机制解决问题. 如:远程监控系统使用数据传输使用427版本的协议,一年

  • 解析Java编程中设计模式的开闭原则的运用

    开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统. 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. Softeware entities like classes,modules and functions should be open for extension but closed for modifications. 开闭原则的含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码

  • 实例讲解Java设计模式编程中的OCP开闭原则

    定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化.          开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统.开闭原则可能是设计模式六项原则中定义最模糊的一个了,它

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

    目录 定义 案例 需求 方案一 执行结果 方案二 执行结果 对比分析 总结 定义 开闭原则( Open Close Principle ),又称为OCP原则,即一个软件实体如类,模块和函数应该对扩展开放,对修改关闭.其中,对扩展开放是针对提供方来说的,对修改关闭是针对调用方来说的. 案例 需求 购买东西的时候,根据支付类型的不同使用不同的方式进行支付,当类型为1时,使用微信支付:当类型为2时,使用支付宝支付 方案一 定义支付类型 /** * 支付类型 * @author:liyajie * @c

  • java设计模式七大原则之开闭原则示例详解

    目录 1.什么是开闭原则? 2.违反Ocp代码案例 3.遵守Ocp代码案例 1.什么是开闭原则? 开闭原则(Open Closed Principle)是编程中最基础.最重要的设计原则.一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构建框架,用实现扩展细节.当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化.编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则. 2.违反Ocp代码案例 package com.

  • 六大设计原则之开闭原则

    定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来: 在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 解决方案: 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统. 开闭原则可能是设计模式六项原则中定义最模糊的一个了,它只告诉我们

  • C#面向对象设计原则之开闭原则

    开闭原则(OCP) 定义:对扩展开发,对修改关闭.好处: 适应性和灵活性. 稳定性和延续性. 可复用性与可维护性. 解释说明:开闭原则指的是两方面:对功能扩展开发,对修改进行关闭:有时当用户要求或需求发生变化时,我们不得不打开原来的代码进行修改,进行功能的扩展或增加,这种设计如果应用到我们以后的项目开发中会导致严重的问题,这样容易导致意外的错误.好的程序,应该保证在我们进行程序扩展时,不会更改以前的代码.如何才能保证这样的效果呢?我们在定义一个类的功能时:最好先定义他的抽象类或接口,这样在功能扩

  • Java设计模式之责任链模式的示例详解

    目录 应用场景 实际代码案例 无模式情况下的代码 采用责任链模式优化代码 采用建造者+责任链模式优化代码 责任链模式优缺点 责任链模式是将链中的每一个节点看做是一个对象,每个节点处理的请求均不相同,且内部自动维护下一个节点对象,当一个请求从链式的首段发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求位置,属于行为模式. 这里需要注意的是每个节点都能对对象进行一定的处理(也可以不处理),处理完成之后节点再进行判断还要进行后续处理还是说传递给下一个节点. 应用场景 首先举一个日常

  • Java设计模式之装饰模式原理与用法实例详解

    本文实例讲述了Java设计模式之装饰模式原理与用法.分享给大家供大家参考,具体如下: 装饰模式能在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.JDK中IO的设计就用到了装饰模式,通过过滤流对节点流进行包装来实现功能的扩展. 装饰模式的角色的组成: ① 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加工功能的对象.(InputStream.OutputStream) ② 具体构件(Concrete Co

  • 深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification. 软件实体(类,模块,方法等等)应当对扩展开放,对修改关闭,即软件实体应当在不修改的前提下扩展.

  • Java设计模式之策略模式定义与用法详解

    本文实例讲述了Java策略模式定义与用法.分享给大家供大家参考,具体如下: 一. 定义: 定义一系列算法,把他们一个一个封装起来,并且使他们可以相互替换. 二. 优点: (1)上下文(Context)和具体策略(ConcreteStrategy)是松耦合关系,因此上下文只需要知道他要使用某一个实现  Strategy接口类的实例,但不需要知道是哪个类. (2)策略模式满足开闭原则,当增加新的具体类时,不需要修改上下文类的代码,上下文即可以引用新的具体策略的实例. 三. 实例: 下面就通过一个问题

随机推荐