码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象设计原则

时间:2016-05-05 00:20:33      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

面向对象设计原则

1.面对对象设计原则共有7个:

        单一职责原则

          开闭原则

          里氏代换原则

          依赖倒转原则

          接口隔离原则

          合成复用原则

          迪米特法则

  学习过程是这样子的:要求掌握每一个原则的中英文名,缩写。中英文定义,并掌握一个实例

2.这些原则的目标是   实现软件的可复用性和可维护性(扩展和修改)

3.单一职责原则(Single Responsibility Principle,SRP

     定义:在软件系统中,一个类只负责一个功能领域中的相应职责。

              There should never be more than one reason for a class to change.

                或   就一个类而言,只能有一个引起它变化的原因。

              ·单一职责原则是实现高内聚,低耦合的指导方针。

     实例:   技术分享

      在Login类中,init()初始化界面,display() 显示界面,valicate() 验证登陆名和密码,getConnectiong()获取数据库连接,……..在这个类中有至少四个引起它变化的原因,那么如何根据单一职责原则进行重构呢~~~ 技术分享

4.开闭原则(Open-Close Principle,OCP)

定义: 一个软件实体,对修改是关闭的,对扩展是开放的。

      Software entities should be open for extension,but closed for modification.

      抽象化是开闭原则的关键。

 实例:

 技术分享

 
 

技术分享

 

 

 

       想要改变Button,如果像上面这样写,就要修改源代码,违背了开闭原则。

      所以我们进行重构:技术分享

提取一个抽象层,然后在配置文件中指定使用的是哪一个子类。

5.里氏代换原则(Liskov Substitution Principle,LSP)

定义:  出现父类的地方可以用子类的对象代替,而不会产生异常。

        Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

   在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

6.依赖倒转原则(Dependence Inversion Principle,DIP)

定义:要针对接口编程,不要针对实现编程

Program to an interface,not an implementation.

 

开闭原则是面向对象设计的目标,里氏代换原则是实现开闭原则的基础,依赖倒转原则是主要手段。

 

7.接口隔离原则(Interface Segregation Principle,ISP)

定义: 一旦一个接口太大,则需要把它分割成一些更细小的接口,使用该接口的客户端仅

需知道与之相关的方法即可。

使用多个专门的接口,而不使用单一的总结口。每一个接口应该承担一种相对独立的角色。

可以在进行系统设计的时候采用定制服务的方式,即为不同的客户端提供宽窄不同的接口,只提供用户需要的行为,隐藏用户不需要的行为。

实例:技术分享

重构之后:

技术分享

8.合成复用原则。很重要!!!(Composite Reuse Principle,CRP)

定义:尽量使用对象组合,而不使用继承来达到复用的目的。

Favor composition of objects over inheritance as a reuse mechanism.

扩展的时候用继承,复用的时候用关联。

继承复用的缺点:

1.     破坏封装性。不管想用的不想用的方法全部都继承了。无法实现选择性继承。

2.     如果想要更换父类,必须修改源代码,违背了开闭原则。

那么,关联复用是怎么实现更换父类的呢

技术分享

B类一开始关联了A类,使用A类的m()方法,后来觉得A1类的m()方法更好,为了遵守开闭原则,使用一个A1Adapt类继承A类,然后在A1Adapt类中重写m()方法,再重写时使用A1类的m()方法。这也就是适配器模式。

3.     只能在有限的条件下使用,比如说,如果A1类是final类呢?。。。

 

8.迪米特法则(Law of Demeter)

为了降低系统的耦合度,可以适量增加中介者类。

面向对象设计原则

标签:

原文地址:http://www.cnblogs.com/zqlmmd/p/5460138.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!