面向对象设计原则——开放关闭原则

本文探讨了系统设计中的核心属性——可扩展性、灵活性和可插入性,并深入解析了面向对象设计原则之一的开闭原则(OCP),阐述了如何在不修改现有代码的基础上扩展系统功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  在前天写的BOLG中里面讲了设计中的一些臭味, 那什么才是一个好的设计!
一个好的系统设计应该具有如下的性质:可扩展性、灵活性、可插入性。
       1、可扩展性(Extensibility)  容易添加新的功能
       2、灵活性(Fiexibility)           代码修改平稳地发生
       3、可插入性(pluggability)  容易将一个类抽出去,同时将另一个同样接口的类加进赤!
     然而要得到这样的性质就要通过面向对象设计原则去实现:
          可扩展性:OCP原则,LSP原则,DIP原则,CARP原则。
          灵活性:    OCP原则,LoD原则,ISP原则。
          可插入性:OCP原则,LSP原则,DIP原则,CARP原则。
           
    面向对象设计原则之一-----OCP

1、“开——闭原则”(Open-Closed   Principle)               简称OCP
 定义:软件实体(类、模块、函数等)应该是可以扩展的,但是是不可修改的。       
 特征:
          (1)、可扩展(对扩展是开放的)
                       模块的行为功能可以被扩展,在应用需求改变或需要满足新的应用需求时,我们可以让模块以不同的方式工作。
          (2)、不可更改(对更改是封闭的)
                        这些模块的源代码是不可以改动的。任何都不许修改模块的源代码。
理解: 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。
             其实这里所说的不被修改是指的重要的抽象层的模块不会被修改,这也就是使变化中的软 系统有一定的稳定性。当系统要扩展或者添加新的行为的时候只需要添加 另外实现的模块即可。由于新添加的模块继承于抽象层,所以实现了其不变性。
              比如在策略模式中,OCP就得到了很好的体现,算法的不同实现其实就是对扩展的支持,而算法抽象类是对系统的不变性的支持,环境类包装了对于环境变化的控制与所采用算法的选择,当采用其他算法的时候只需要扩展算法类即可。 
               也就是说关键在于抽象,抽象出来的东西是不变的,具体的实 现继承于抽象,所以保证了对修改的Close,而抽象的实现方式有多种,可以随需添加,当然这也就是对扩展的Open。 另外要求的是技术包括:多态 Polymorphism,接口 Interface,继承 Inheritance.

注:另外在对可变性进行封装的时候也应该注意以下几点:
          1.识别系统有可能变化的地方。
          2.不要将一种可变形散布在多处代码,而应该封装起来。
          3.不要将一种可变性与另外一种可变性混在一起。
             

 

                  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值