面向对象的设计原则
1.前言
面向对象三大特性:继承,封装,多态
面向对象是一种程序思想
而设计模式是一些代码设计经验形成的设计范式
面向对象的设计原则是介于面向对象和设计模式中间,是面向对象优秀代码的设计思想
2.面向对象设计七大原则
说到设计原则,不免说到七大原则
(1)单一原则:
作用:降低类的复杂性和提高可读性
做法:每个类只负责一项职责,如果类中方法少,则在方法级别上保持单一原则也行
总之当类不单纯时,利用接口,类和方法等来分解类
例子:dao层的一个类操作一个表
出行工具类->改成空中飞行类+水中类+陆地类
->改成类中飞行出行方法+水中方法+陆地方法
(2)接口隔离原则:
(比较简单)
接口是动作集合(动词),就是一类技能,设计接口要适合项目
类是实体(名词),类实现接口说明类要有这些功能,实现接口要切合功能
(3)依赖倒置原则则:
作用:扩展性
做法:当具体类相似且很多时,用抽象类或者接口做抽象层,抽象层被依赖有利于扩展
例子:如人类要聚合衣服抽象类,衣服有夹克,T恤
人要聚合饮食接口,饮食的方式有吃水果,喝水
(4)里式替换原则:
(比较简单)
接口隔离原则不要实现不切合的接口
里式替换原则不要继承不切合的类,一部分切合的类可以让他们继承更基础的类
如:b要调用a的方法去,继承他,但又要重写它,此时就要将ab关系重构为组合。
(5)开闭原则 ocp:
作用:易扩展
理论做法:(其他原则都是为了开闭原则)
对提供功能方扩展开放,对使用功能方修改关闭
扩展软件新增功能,而不是修改代码新增功能
具体做法:方法定义在接口或者抽象类
功能方新增子类,
main方法使用(用户点击等触发)
使用方多态调用 才不用修改 (调用功能模块代码)
例子:画图功能接口定义画图方法,三角形等类实现
学习使用类聚合画图接口
新增图形功能类时,学习使用类不修改
(6)迪米特法则:
作用:减少各类的关联,解耦易扩展
做法:用依赖/ 组合/ 聚合的方式关联对象,即成员变量 ,方法参数进入,方法返回值走出,别让类对象局部变量(方法内对象)
例子;
(原来)
(改为)
(7)合成复用原则:
作用:复用性
做法:尽量使用依赖(使用),合成/组合(setter)、聚合的方式(new),避免使用继承
七大原则其实就是:
类要单一,多个相似类可以抽象,
实现接口要合理,继承要合理,少用继承
使用类和被使用类之间用抽像层变量,且不做局部变量
3.面向对象设计七大原则之外
但是我觉得只说七大原则难免把设计原则形容得边边框框,不太灵活,毕竟优秀的代码应该是分析判断,设计改进,随着需求变化一步步改进而来的,而并非一好而终,也没有最好之说。在具体的相求面前,我们要分析多种需求的在面向对象世界的本质并将提供较好的程序设计方式。