实例解析OOP程序设计七大设计原则(一)

开闭原则(Open-Closed Principle,OCP)

开闭原则是这七大设计原则中最常见、最基本的

开闭原则定义:软件实体对扩展是开放的,但对修改是关闭的。意思就是说在不修改软件实体的基础上去扩展其他功能。

开闭原则实例:

比如实现一个绘制图线的功能

设计方案如下图所示

实例解析OOP程序设计七大设计原则(一)_第1张图片

用户类中直接调用画直线类,但是如果有一个新需求,要求我们画斜线或者曲线的话,这时就需要修改画直线类中的代码(使用switch,else if),这样就违背了开闭原则,于是我需要在不修改实体的基础上去扩展画斜线和曲线功能

重构后的代码设计方案如下图所示

实例解析OOP程序设计七大设计原则(一)_第2张图片

这样我们在没有改动代码的情况下,而是添加代码的情况下完成功能扩展


单一职责原则(Simple Responsibility Principle,SRP)

如果一个类具有多个职责,应该把这多个职责分离出去,再分别创建一些类去一一完成这些职责
换句话说就是一个类的职责要单一,不能将太多的职责放在一个类中
单一职责核心:高内聚、低耦合

如下图是一个类画线的实现:

实例解析OOP程序设计七大设计原则(一)_第3张图片

但是功能太过集中,严重违背了单一职责原则,重构后如下图所示

实例解析OOP程序设计七大设计原则(一)_第4张图片


里氏替换原则(Liskov  Substitution Principle,LSP)


是继承复用的基石,说白了就是继承与派生的规则
里氏替换原则核心:在软件系统中,一个可以接受父类对象的地方必然可以接受子类对象
里氏替换原则实例:某系统需要实现画直线功能,现在有DrawLineA和DrawLineB两种画图方式,在操作类中提供了这两种画图方法选择画直线
实例解析OOP程序设计七大设计原则(一)_第5张图片

现在我需要改变或添加一种画直线方式来画直线,比如原先使用DrawLineA方式进行画直线现在更换为DrawLineB方式来画直线,如果直接修改操作类的代码就违背了开闭原则。现在使用里氏替换原则重构代码, 既可以方便了系统扩展,又遵循了开闭原则
重构后的方案图如下图所示
实例解析OOP程序设计七大设计原则(一)_第6张图片
所以说里氏替换原则是实现开闭原则的重要方法之一


依赖倒置原则(Dependence Inversion Principle,DIP)


依赖倒置也叫依赖注入、依赖倒转
要针对抽象层编程,不要针对具体类编程
依赖倒置原则核心:要依赖于抽象,不要依赖于具体的实现。
分开来说:(注:抽象:接口或抽象类;细节:具体实现;如果把模块层次关系比作基础关系的话:高层模块和底层模块对应于父类和子类)
一、高层模块不应该依赖底层模块,这两者应该依赖与其抽象 
二、抽想不应该依赖细节
三、细节应依赖抽象
依赖倒置实例:
比如某系统可以从本地获取和服务器获取数据,后将数据可以为转化配置成XML文件和XLS文件

实例解析OOP程序设计七大设计原则(一)_第7张图片
假设我们增加了数据源或者有新的转化格式,需要修改操作类里面的源代码,这样就违背了开闭原则
现在使用依赖倒置原则对其进行重构
重构方案图如下图所示
实例解析OOP程序设计七大设计原则(一)_第8张图片
实例解析OOP程序设计七大设计原则(二)



欢迎转载,转载注明出处: blog.liujunliang.com.cn

你可能感兴趣的:(游戏开发)