zoukankan      html  css  js  c++  java
  • 大话设计模式:设计模式六大原则

    设计模式简介

        GOF(Gang of Four),指的是Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides四人出得一本书,在书中第一次提出设计模式得概念。

        书中共有23中设计模式,分为3类创建型(5种)、结构型(7种)、行为型(11种)。

    • 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
    • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
    • 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。

    设计模式六大原则:

        设计模式得根本目的是代码复用、增加可维护性,其中最重要的是开闭原则,开闭原则是终极目标,其余六种原则可以看作是开闭原则的实现方法。

         开闭原则(OCP | Open Close Principle):

            对扩展开放,对修改关闭。当我们程序在扩展时,在不修改现有代码的情况下新增功能,实现一个热插拨效果。 

            抽象化时开闭原则的关键,在Java中需要使用接口和抽象类。

            具体做法是:定义抽象层,通过子类来实现具体的功能,当系统扩展时,抽象层不需要改变,只需要新增类来实现新功能,在不修改代码的基础上实现功能新增就达到开闭原则。

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

            程序中使用到基类的地方,完全可以用实现基类的子类替换,反过来使用基类替换子类不成立。

            子类继承自父类,拥有父类定义的方法和变量,子类会添加自己的方法和变量,当用父类替换子类时可能造成子类新增的方法在父类找不到,导致程序报错。例如在IO包下的BufferedReader拥有readLine()这个方法,而他的父类Reader没有这个方法,用父类替换子类就会编译出错。

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

            针对接口编程而不是针对实现编程。

            在参数传递或类间关联关系时,尽量用更高层次的抽象类,而不是具体类。例如List和ArrayList,在参数传递时,用List比ArrayList好。

            为了实现这一原则,子类应当只实现抽象类或者接口中的方法,不要多余的方法,这样父类可以调用子类中的方法。

          小结:开闭原则是编码中的规范,里氏替换是编码中的框架,依赖倒置是具体代码。

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

            每个接口应该只有一种角色,要使用多个隔离接口而不是使用单一的总接口,降低类的耦合度。

            每个接口应该干一件事,不该干的事不干。

            接口包含用户需要的一系列方法,用户不需要的不要放在同一个接口。

         最小知道原则(DP | Demeter Principle):迪米特法则

            一个人应尽量少的与其他实体之间相互作用,使系统模块更加独立。在一个模块修改时尽量小的影响别的模块。

            尽量减少类之间的交互,如果两个对象之间不直接通信,那么两个类之间不应该相互通信,如果两个类之间必须相互交互,可借助第三方类。

            类应该尽量降低成员变量和函数的访问权限,尽量设计不可变类,应尽量减少其他类的引用。

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

            一个类应该只负责一个功能模块,引起一个类类变化的因素只有一个。

            一个类职责越多,复用的功能性越小,代码之间的相互调用就会越大,根据职责不用划分不同的类,不同的变化原因封装在不同的类中,当一个变化总会引起一系列变化时,应当分装在一个类里面。

            单一职责原则是实现高内聚低耦合的指导方针,需要发现类的多重职责。      

  • 相关阅读:
    【JavaScript】--ajax
    【Django】--Models 和ORM以及admin配置
    【Django】--基础知识
    【jQuery】--图片轮播
    双系统 windows引导项添加
    LVM
    linux安全加固
    oracle 11G 配置侦听文件
    LVM
    《virtual san 最佳实践》节选 Virtual SAN的发展与现状
  • 原文地址:https://www.cnblogs.com/dc-earl/p/10256699.html
Copyright © 2011-2022 走看看