面向对象7大设计原则

来源:互联网 发布:服装之星v8数据库补丁 编辑:程序博客网 时间:2024/06/05 11:42

NO.1 单一职责原则(Single Responsibility Principle)
1. 定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
2. 单一职责是实现高内聚,低耦合的指导方针

NO.2 开闭原则(Open-Closed Principle)
1. 定义:一个软件实体应该对扩展开放,对修改关闭。即一个模块在不修改源代码的前提下被扩展。
2. 开闭原则是可复用设计的第一块基石,是最重要的面向对象设计原则。

NO.3 里氏代换原则(Liskov Substitution Principle)
1. 定义:所有能够引用基类的地方必须能透明的使用其子类对象
2. 里氏代换是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象替换父类对象
3. 里氏代换注意问题:
● 子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法
● 尽量把父类设计为抽象类或接口,在声明实例时,以抽象层进行声明,运行时由子类负责实例化
● 在编译阶段,java编译器会检查程序是否符合里氏代换原则,这只是一个与实现无关,纯语法意义上的检查

NO.4 依赖倒转原则(Dependence Inversion Principle)
1. 定义:对接口编程,而非对实现编程
2. 代码要依赖于抽象层,而不要依赖于具体的实现层,针对接口、抽象类进行编程,而不要针对具体的实现类编程,将具体类放在配置文件中
3. 类之间的耦合关系:
● 零耦合关系:两个类之间没有任何耦合关系
● 具体耦合关系:两个具体类之间,由一个类对另一个具体类实例的直接引用
● 抽象耦合关系:两个类之间发生耦合关系,但至少有一个类为抽象的

NO.5 接口隔离原则(Interface Segregation Principle)
1. 定义:客户端不应依赖那些他不需要的接口,即:一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。
2. 使用多个专门的接口,而不使用单一的总接口

NO.6 合成复用原则(Composite Reuse Principle)
1. 定义:尽量使用对象组合。而不是继承来达到复用目的
2. 通过继承来实现复用称为“白箱”复用
通过组合/聚合关系复用称为“黑箱”复用

NO.7 迪米特法则(Low of Demeter)
1. 多种定义:
● 不要和“陌生人”说话
● 只与你的直接朋友通信
● 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位
2. 实质:一个软件实体应当尽可能少的与其他软件实体 发生相互作用,对软件实体间的通信进行限制
3. 迪米特法则中,对于一个对象,它的朋友包括:
● 但前对象本身(this)
● 以参数形式传入到当前对象方法中的对象
● 当前对象的成员对象
● 如果当前对象的成员对象是一个集合,那么集合 中的元素也都是朋友
● 当前对象所创建的对象
4. 迪米特法则分为狭义、广义:
● 狭义迪米特:如果两个类之间不必彼此直接通信,那么这两个类就不应该发生直接的相互作用,如果其中的一个类需要调用另一个类的某一方法,可以通过第三者转发这个调用。
● 广义迪米特:对对象之间的信息流量、流向以及信息的影响的控制,主要是对信息隐藏地控制
5. 迪米特法则的主要用途在于控制信息的过载,在运用至系统时,注意事项:
● 在类的划分上,尽量创建松耦合的类
● 每一个类都应当尽量降低其成员变量、成员方法的访问权限
● 在类的设计上,只要有可能,一个类应设计成不变类
● 一个对象对其他对象的引用应降到最低

原创粉丝点击