首页 > 其他分享 >设计模式原则之:开闭原则原则

设计模式原则之:开闭原则原则

时间:2023-08-03 23:12:34浏览次数:37  
标签:原则 void public print 设计模式 type class 开闭

  类似于做一个多支付的业务,提供一个service来进行支付、查询操作,具体的实现类如:WeChat、AliPay等实现service服务,来进行服务的调用,如果后续增加Paypal支付,则由提供方实现service即可使用方无需动代码

引发开闭原则的实例

/**
 * @description: 引发开闭原则的示例
 * @author: abel.he
 * @date: 2023-08-03
 **/
public class Test {

    public static void main(String[] args) {
        Print print = new Print();
        print.print(new Son1());
        print.print(new Son2());
        // 如果增加3  需要新增一个类(提供方) 且 在使用的过程中增加判断(使用方) 不符合开闭原则(ocp) 且后续处理的越多会越麻烦
    }

}

class Parent {
    int type;
}

class Son1 extends Parent {
    public Son1() {
        super.type = 1;
    }
}

class Son2 extends Parent {
    public Son2() {
        super.type = 2;
    }
}

class Print {
    public void print(Parent parent) {
        // 第一种判断写法
        if (parent.type == 1) {
            System.out.println("son1 打印了数据");
        } else if (parent.type == 2) {
            System.out.println("son2 打印了数据");
        }

        // 第二种判断写法
        switch (parent.type){
            case 1 -> System.out.println("son1 打印了数据");
            case 2 -> System.out.println("son2 打印了数据");
        }
    }
}

分析上面代码

  1. 比较好理解,简单已操作
  2. 缺点是违反了设计模式开闭(ocp)原则,即对扩展开放(提供方),对修改关闭(使用方)。即当我们给类增加新功能的时候,尽量不修改代码,或者尽量少修改代码

开闭原则进行优化

/**
 * @description: 开闭原则实现
 * @author: abel.he
 * @date: 2023-08-03
 **/
public class Test {
    public static void main(String[] args) {
        Print print = new Print();

        print.print(new Son1());
        print.print(new Son2());
        // 如果想实现其他的 则可以使用Son3实现Person 来完成功能的增加
    }
}

abstract class Person {
    int type;
    abstract void print();
}

class Son1 extends Person {

    public Son1() {
        super.type = 1;
    }

    @Override
    void print() {
        System.out.println("son1 打印");
    }
}

class Son2 extends Person {

    public Son2() {
        super.type = 2;
    }

    @Override
    void print() {
        System.out.println("son2 打印");
    }
}

class Print {
    public void print(Person person) {
        person.print();
    }
}

  

标签:原则,void,public,print,设计模式,type,class,开闭
From: https://www.cnblogs.com/abel-he/p/17604732.html

相关文章

  • 设计模式原则之:里氏替换原则
    示例已发推论 /***@description:示例引发里氏替换原则的实现*@author:abel.he*@date:2023-08-03**/publicclassTest1{publicstaticvoidmain(String[]args){Personperson=newPerson();System.out.println("9+2="+per......
  • 设计模式 C++
    参考博客:https://blog.csdn.net/weixin_45712636/article/details/124328504参考视频:https://www.bilibili.com/video/BV1Np4y1z7BU?p=1&vd_source=fce372ba0aa0bf9ed76094e3192b7015参考文档:https://bright-boy.gitee.io/technical-notes/#/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%......
  • 【设计模式】享元模式Flyweight:通过共享对象减少内存加载消耗
    (目录)享元模式Flyweight:通过共享对象减少内存加载消耗享元模式的用意享元模式以共享的⽅法⾼效地⽀持⼤量的细粒度对象,享元对象能做到共享的关键是区分内蕴状态和外蕴状态。⼀个内蕴状态是存储在享元对象内部的,并且是不会随环境改变⽽有所不同的,因此⼀个享元可以具有内蕴状态......
  • 【设计模式】装饰器模式Decorator:在基础组件上扩展新功能
    (目录)装饰器模式看上去和适配器模式、桥接模式很相似,都是使用组合方式来扩展原有类的,但其实本质上却相差甚远呢。简单来说,适配器模式侧重于转换,而装饰模式侧重于动态扩展;桥接模式侧重于横向宽度的扩展,而装饰模式侧重于纵向深度的扩展。原理装饰模式的原始定义是:允许动态地向......
  • 单一职责原则SRP
    所谓单一职责原则,指的是,一个类应该仅有一个引用它变化的原因。这里变化的原因就是所说的“职责”,如果一个类有多个引起它变化的原因,那么也就意味着这个类有多个职责,再进一步说,就是把多个职责耦合在一起了。这会造成职责的相互影响,可能一个职责的变化,会影响到其他职责的实现,甚至引起......
  • 开放-关闭原则OCP
    所谓开放-关闭原则,指的是,一个类应该对扩展开放,对修改关闭。一般也被简称为开闭原则,开闭原则是设计中非常核心的一个原则。开闭原则要求的是,类的行为是可以扩展的,而且是在不修改已有代码的情况下进行扩展,也不必改动已有的源代码或者二进制代码。实现开闭原则的关键就在于合理地抽象......
  • PHP设计模式汇总
    PHP设计模式汇总没想到啊,没想到。自己竟然坚持了下来,完成了设计模式深入的学习,并且输出了23篇用php演示的设计模式的文章。但这不是最主要的,更深层次的收获是顺便背下了这些模式的定义及类图。在深入学习了设计模式之后,对Laravel等框架的架构理解也更清楚明了了。就像我在很多模式......
  • Java设计模式--装饰器模式
    Java设计模式--装饰器模式一、问题背景在项目场景中,有这样一个需求,需要对录入的加班进行规则校验,包括但不限于,对加班的录入时间进行检查,对录入的加班类型进行检查,对加班日期的班次进行对比检查,对潜入系统的时长进行对比检查等等。具体来说,就是对一条加班记录,进行多种规则的检查......
  • 【设计模式】适配器模式Adapter:处理不同 API 接口的兼容性
    (目录)适配器模式适配器模式(AdapterPattern)是作为两个不兼容的接⼝之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独⽴接⼝的功能。在某些时候,客户期望获得某种功能接⼝但现有的接⼝⽆法满⾜客户的需求,例如美国的正常供电电压为110V,⼀个中国⼈带了⼀款中国制造......
  • Java面试题 P32:数据库篇:MySql篇-MySql优化-索引-索引创建原则有哪些?
             ......