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

设计模式:设计原则

时间:2017-10-11 20:24:02      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:迪米特   过程   组合   情况下   dip   输入参数   入参   开发   信息   

OOP三大特性

封装

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,对不可信的进行信息隐藏。 通俗来说,将属性、操作放到一个类中,就是封装。

继承

继承是指这样一种能力,它可以使用现有的类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。

多态

多态指一个类实例的相同方法在不同情形有不同的表现形式。具体来说就是不同实现类对公共接口有不同的实现方式,但这些操作可以通过相同的方式(公共接口)予以调用。

 

OOD 六大原则

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

          一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

         单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。

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

         一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

         为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键

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

         所有引用基类(父类)的地方必须能透明地使用其子类的对象。         

         在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。

 

当使用继承时,遵循里氏替换原则。子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:

  • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 子类中可以增加自己特有的方法。
  • 当子类的方法重载父类的方法时,方法的形参要比父类方法的输入参数更宽松。
  • 当子类的方法实现父类的抽象方法时,方法的返回值要比父类更严格。

         此外,即便是要重些父类方法, 也要调用父类方法。

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

         抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

 

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

         使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

迪米特法则(Law of  Demeter, LoD):

         一个软件实体应当尽可能少地与其他实体发生相互作用。

 

日常开发中,使用这些原则进行代码设计,有助于提高代码可读性、可维护性、可复用性、健壮性等。

目前成熟的设计模式有23种,在开发中,我们不可避免的会使用各种设计模式。而这些设计模式会执行了这些原则中的一条或者多条。完全执行的设计模式是很少的。

这点是需要知道的,也就是说我们不需要完全的按照这些原则来写代码。同时呢,在使用某种设计模式时,也需要根据实际情况进行变通,不能为了用设计模式而使用设计模式。

否则就是:死读书、读死书,最终就是读书死。

 

设计模式使用过程中,他们也不是孤立的,完全可以是相辅相成的:

 

技术分享

 

 

总之一句话,代码设计过程中,我们还要遵循高内聚(模块内)、低耦合(模块间),多用组合、少用继承。

 

设计模式:设计原则

标签:迪米特   过程   组合   情况下   dip   输入参数   入参   开发   信息   

原文地址:http://www.cnblogs.com/f1194361820/p/7652147.html

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