设计模式--六大设计原则总结

在学习23种常用的设计模式之前,我们必须了解设计模式中的六大设计原则,即我们常说的SOLID原则,因为它们是学习设计模式的基础,在设计模式中或多或少会使用到其中的设计原则,了解这当中的道理将有助于我们理解常用的设计模式。

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

定义:就一个类而言,应该仅有一个引起它变化的原因。

解析:从定义来看,理解起来应该不困难,通俗点地说就是不存在多个原因使得一个类发生变化,也就是说一个类只负责一种职责工作,该原则是六大原则中最简单的一种,因此不必多说。

优点:让一个类只负责一种职责的好处有如下几种

(1)类的复杂度降低,一个类只负责一个功能

(2)可读性增强,复杂度降低,阅读起来自然轻松

(3)可维护性强,一个易读、简单的类当然也易维护                                                             

开放-关闭原则,OCP(Open-Close Principle)

定义:一个软件实体(如类、模块、函数)应当对扩展开放,对修改关闭。

解析:该定义理解起来略微抽象,按照自己的理解就是,对于一个已经存在的类,如果我们需要继续去扩充其功能,不应该直接修改该类的内部实现,而是应该通过抽象类或者接口来进行功能的扩充,由此可见,实现开闭原则关键是抽象。至于为什么需要开闭原则,我们可以假想,一个网络游戏若需要更新,我们常做的方法是为该游戏打上一个补丁,或者是更新它仅需更新的模块,而不会把整个游戏卸载,然后再重新装上新版本的游戏。

优点:

(1)具有灵活性,通过拓展一个功能模块即可实现功能的扩充,不需修改内部代码。

(2)具有稳定性,表现在其基本功能类不允许被修改,使得被破坏的程度大大下降。

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

定义:里氏替换原则的定义有两种,据说是由麻省理工的一位姓里的女士所提出,因此以其名所命名。

定义1:如果对一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1所定义的程序P中在o1全都替换成o2时,程序的行为不发生任何变化,那么T2为T1的子类。

定义2:所有引用父类的地方都必须能够透明地使用子类对象。

解析:其实两个定义所表达的意思都相同,大概是说,就是在所有父类出现的地方,子类都可以出现,并且将父类对象替换为子类对象的时候,程序不会抛出任何异常或者错误,因此我们需要注意的是,尽量不要重载或者重写父类的方法(抽象方法除外),因为这样可能会改变父类原有的行为。

代码:

class Base{
   publc void action{
      System.out.println("1+1=2"); 
   }
}

public class Client{
   public static void main(String[] args){
      Base b = new Base();
      b.action();
   }  }


运行结果:1+1=2

class Concrete extends Base{
   public void action{
      System.out.println("1+1=1");
   }
}

public class Client{
   public static void main(String[] args){
      Base b = new Concrete();  //将所有父类出现的地方都替换成子类
       b.action();
   }
}

运行结果:1+1=1

由上可见,子类在扩展父类的功能时,重写了父类方法,导致了程序结果的错误。因此,对于里氏替换原则的更通俗的说法就是,子类可以扩展父类的功能,但不改变父类原有的功能。

优点:可扩展性与可维护性强

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

定义:一个类对另一个类的依赖应该建立在最小的接口上。

解析:一个接口代表一个角色,不应该将不同的角色都交给一个接口,这样会导致形成一个臃肿的大接口。听起来好像有些像单一职责原则,但是不尽然,在单一职责原则中,一个接口可能有多个方法,提供给多种不同的调用者所调用,但是它们始终完成同一种功能,因此它们符合单一原则,却不符合接口隔离原则,因为这个接口存在着多种角色,因此可以拆分成更多的子接口,以供不同的调用者所调用。

优点:符合高内聚低耦合的设计思想,意在设计一个短而小的接口和类,这个在代码重构中比较常见,可读性、可扩展性、可维护性等都不错,很受程序员们的欢迎。

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

定义:抽象不应该依赖于细节,细节依赖于抽象。

解析:依赖倒置原则在程序编码中很常运用,其中心思想就是面向接口编程,高层模块不应该依赖底层模块(原子操作的模块),两者都应该依赖于抽象。接触过Spring框架的朋友都知道,Spring框架就是一个很好的依赖倒置原则思想的体现。

优点:还是那句,代码结构清晰,维护起来容易..哎,我都不想说了

最少知识原则,LKP(Least Knowledge Principle),又称迪米特法则,LOD(Law Of Demeter)

定义:一个对象应该对其他对象有最少的了解。

解析:意思就是一个对象对其他对象知道得越少越好,其核心就是低耦合。迪米特法则又有一个解释,即是只与直接的朋友通信,何谓直接朋友?大家都知道,对象之间的交流必定是少不了耦合的,为了降低对象之间的耦合,我们可以设定一个中间者,让这个中间者给要通信的双方进行传话,这样的话,这两个对象耦合程度可以达到很小,而我所说的这个中间者,就是直接朋友。

优点:我们可以试想一下,两个对象之间的耦合越大,其维护起来就越是困难,假如我们需要改变其中一个对象,另外一个对象也要进行大量的修改,而迪米特法则,则让对象之间的耦合降到最小,符合高内聚低耦合的特性,这样维护起来当然就容易多咯~

 

哎呀,还没吃午饭,今天就到此为止先,接下来再把代码类图什么的给贴上,自己的学习总结,难免有错漏之处,欢迎各位指出。

转载于:https://my.oschina.net/boxizen/blog/169977

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript设计模式通常包括以下六大原则: 1. 单一职责原则(Single Responsibility Principle,SRP):一个对象(函数、类等)只应负责一个单一的职责或功能。这使得对象的设计更加简单、清晰,并提高了代码的可维护性和可复用性。 2. 开放封闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即通过扩展已有的代码来实现新的功能,而不是直接修改已有的代码。这样可以保持代码的稳定性和可靠性。 3. 里氏替换原则(Liskov Substitution Principle,LSP):子类对象应该能够替换父类对象,而程序的行为不会发生变化。即在使用父类对象的地方,可以替换成子类对象而不会影响程序的正确性。 4. 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块(抽象)不应该依赖于底层模块(具体),而是应该依赖于抽象。具体来说,将抽象与具体的实现分离,通过依赖注入的方式来实现高层模块对底层模块的使用。 5. 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该强迫依赖它不需要的接口。接口应该小而精简,不应该包含多余的方法。这样可以避免接口的臃肿和不必要的依赖。 6. 迪米特原则(Law of Demeter,LoD):一个对象应该对其他对象有尽可能少的了解,只与其直接的朋友交流。换句话说,应该尽量减少对象之间的耦合关系,降低代码的复杂性和维护成本。 这些设计原则是指导软件设计的准则,它们可以帮助我们编写出高质量、易维护并且可扩展的JavaScript代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值