2.开闭原则

文章目录

  • 一、定义
  • 二、开闭原则分析
  • 三、示例1
    • 1.存在问题
    • 2.开闭原则重构
  • 四、示例2
    • 1.存在问题
    • 2.重构
  • 五、总结

一、定义

??一个软件实体应当对扩展开放,对修改关闭

??也就是说在设计 一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即在不修改源代码的情况下改变这个模块的行为。

二、开闭原则分析

??(1)开闭原则是面向对象设计中最重要的原则之一。

??在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。

??(2)抽象化是开闭原则的关键。抽象化就是将一个类(实体)里面或者多个类里面公共的东西抽取出来,抽象的好处就是稳定的、可靠的、不容易发生改变的。

??开闭原则还可以通过一个更加具体的 “可变性封装原则” 来描述,对可变性封装原则要求找到系统的可变因素并将其封装起来。

与信息隐藏原则有些类似,信息隐藏原则有两个:一个是隐藏复杂的东西,另一个是隐藏可变的东西。

三、示例1

1.存在问题

2.开闭原则

2.开闭原则重构

??按照前面的方法,那么它违背了开闭原则。接下来就用开闭原则进行重构。

??(1)解决问题的思路:抽象化是开闭原则的关键,开闭原则要将可变的东西进行封装,将可变的东西进行封装变成稳定东西。

??(2)找出可变点,在这里可变的就是按钮的形状,所以需要将它稳定下来,也就是进行抽象化,封装。

??如果需求发生改变,要使用其他类型的按钮,只需要继承 AbstractButton 类就行。

如下图

2.开闭原则

??(3)还有一个问题:display() 显示 LoginForm 的时候按钮从哪里取呢,按钮的形状是变化的,这时候要额外增加一个文件(config.xml)。config.xml 文件里面增加一个节点叫做 ,在这个节点里标注出来 LoginForm 使用的是哪种类型的按钮。

??这里也起到了一个隔离的作用,把变化的东西移到第三方的配置文件里面,在配置文件里指出使用的是哪种。

??当 LoginForm 调用 display() 时,display() 可以读取配置文件进行初始化。

??如果需求发生改变,打开配置文件,将按钮的名称改好就可以,这样也是不修改源代码的。

2.开闭原则

1.存在问题

??上面是一般传统的做法,但是这个做法也是有问题的,当需求发生变化时,要修改源代码。

2.开闭原则
2.开闭原则

2.开闭原则

??抽象化是开闭原则的关键

来源:行孤、

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月28日
下一篇 2021年4月28日

相关推荐