美文网首页
面向对象六大设计原则(二)开闭原则

面向对象六大设计原则(二)开闭原则

作者: MQ_Twist | 来源:发表于2020-11-11 18:30 被阅读0次

绝对不要坐等胜利的到来。

面向对象设计原则全集

前言

接上篇
面向对象六大设计原则(一)单一职责原则

正文

开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。开闭原则由Bertrand Meyer于1988年提出,其定义如下:

开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

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

任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。当软件系统需要面对新的需求时,我们应该尽量保证系统的设计框架是稳定的。如果一个软件设计符合开闭原则,那么可以非常方便地对系统进行扩展,而且在扩展时无须修改现有代码,使得软件系统在拥有适应性和灵活性的同时具备较好的稳定性和延续性。随着软件规模越来越大,软件寿命越来越长,软件维护成本越来越高,设计满足开闭原则的软件系统也变得越来越重要。

为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在Java、C#等编程语言中,可以为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。在很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们定义系统的抽象层,再通过具体类来进行扩展。如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。

举例

做一个答题类App,里面有很多种题型,如选择题、填空题等。每一个题型对应一个View,然后做一个View管理类——TopicViewManager,老样子,一切从简。

  • .h
@interface TopicViewManager : NSObject

+ (void)displayWithType:(NSString *)type;

@end
  • .m
@implementation TopicViewManager

+ (void)displayWithType:(NSString *)type {
    if ([type isEqualToString:@"Choice"]) {//选择题
        TopicOfChoiceView *view = [TopicOfChoiceView new];
        [view disPlay];
    } else if ([type isEqualToString:@"FillBlank"]) {//填空题
        TopicOfFillBlankView *view = [TopicOfFillBlankView new];
        [view disPlay];
    }
}

@end

需求有变动,题型增加了语音题、视频题,该如果修改?简单,新增对应的view类,然后在TopicViewManager加相应的判断。问题是可以解决,那么问题来了:
TopicViewManager相当于抽象的一个软件实体,各种题型View是软件的扩展,每扩展一次,TopicViewManager都要修改一次,这就违背了开闭原则定义:软件实体应尽量在不修改原有代码的情况下进行扩展。

优化

  • 增加一个抽象题型类TopicView,将各种具体题型类作为其子类;
  • TopicViewManager只针对TopicView编程。
    2.png
  • OCPTopicViewManager.m
+ (void)displayWithView:(OCPTopicView *)topicView {
    [topicView display];
}

以后扩展题型的时候,只需要创建一个类继承OCPTopicVIew,然后作为参数传给OCPTopicViewManager即可。

Demo地址

后记

如有不足的地方,请留言,以便及时改正。

感谢:面向对象设计原则之开闭原则

相关文章

  • 面向对象设计原则(二)开闭原则

    面向对象设计原则之开闭原则 开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。 开闭原则的...

  • 01-设计模式原则

    面向对象的设计原则 面向对象的设计原则也被称为SOLID。SOLID原则包括单一职责原则、开闭原则、里氏替换原则、...

  • Swift设计模式----目录

    面向对象设计原则: 开闭原则 单一职责原则 依赖倒置原则 接口分离原则 迪米特法则 里氏替换原则 面向对象设计模式...

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

    开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。开闭原则由Bertrand Meyer...

  • 面向对象设计的六大基本原则

    面向对象设计的六大基本原则: 1)开闭原则 2)里氏代换原则 3)依赖倒转原则 4)接口隔离原则 5)迪米特法则 ...

  • 《设计模式之蝉》 第五章 开闭原则

    开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。 开闭原则(Open-Closed Pr...

  • 面向对象的几大原则1

    一、开闭原则 是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。 定义:开闭原则(Open-Clo...

  • Android设计模式—面向对象六大原则

    面向对象六大原则: 单一职责原则 开闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 最少知识原则 单一职责原则 ...

  • 面试题

    1>面向对象设计原则 单一职责原则,开闭原则,依赖倒置原则(面向接口编程),迪米特原则,里氏替换原则,接口隔离原则...

  • 设计模式原则-开闭原则

    开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实...

网友评论

      本文标题:面向对象六大设计原则(二)开闭原则

      本文链接:https://www.haomeiwen.com/subject/vzpebktx.html