面向对象开发中的七大设计原则和23种设计模式

一、面向对象开发中的七大设计原则

  软件开发中最核心的思想就是“高内聚,低耦合”,主要的目的也是为了方便后期的维护和变更。下面的设计原则也是依靠这个核心思想衍生出来的。

  1、单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:单一职责原则想表达的核心思想就是“高内聚”,一个模块只完成一项功能。在面向对象设计中,一个类只应该负责一项职责,如果同时承担太多职责,就等于把这些职责耦合在了一起。

    后面很可能因为某项职责的变更而导致其他职责的削弱或者抑制其他职责的能力。

  2、里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】:任何时候都可以用子类型来替换父类型。

  3、依赖倒置原则【DEPENDENCE INVERSION PRINCIPLE】:面向接口编程,声明方法的参数类型、方法的返回类型、变量的引用类型时,尽可能使用抽象类型而不用具体类型,因为抽象类型可以被它的任何一个子类型所替代,请参考下面的里氏替换原则。

  4、接口隔离原则【INTERFACE SEGREGATION PRINCIPLE】:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口。

  5、迪米特法则【LOW OF DEMETER】:迪米特法则又叫最少知识原则,一个对象应当对其他对象有尽可能少的了解。(低耦合)

  6、开闭原则【OPEN CLOSE PRINCIPLE】 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

  7、组合/聚合复用原则【Composition/Aggregation Reuse Principle(CARP) 】:尽量使用组合和聚合,少使用继承的关系来达到复用的原则。类与类之间简单的说有三种关系,IS-A关系、HAS-A关系、USE-A关系,分别代表继承、关联和依赖。

   其中,关联关系根据其关联的强度又可以进一步划分为关联、聚合和合成,但说白了都是HAS-A关系,合成聚合复用原则想表达的是优先考虑HAS-A关系而不是IS-A关系复用代码

二、23种设计模式

  设计模式是一套被反复使用的代码设计经验的总结,是对上面的设计原则的进一步细化,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。这23中设计模式概括起来可以分为三大类:

    1、创建型模式(5种):

      1.1、工厂方法模式(factory method pattern):如果需要创建大量对象,并且这些类都实现了共同的接口,那么可以用工厂方法模式来进行创建。

         工厂方法模式存在缺陷,由于对象的创建依赖工厂的方法,如果需要创建新的类的实例,需要修改工厂类的方法,这样违反了开闭原则。

      1.2、抽象工厂模式(Abstract factory pattern):由于工厂方法模式违反了开闭原则,那么我们就可以将工厂也进行抽象,如果要创建新的类型的对象,就创建新的对应的工厂类。这就是抽象工厂模式,该模式的缺点是创建的类比较多。

      1.3、单例模式(Singleton pattern):单例对象能保证在一个JVM中,该类只有一个实例存在。

      1.4、建造者模式(Builder pattern):工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象。建造者模式也可以看作是对抽象工厂模式的整合,创建较复杂的对象。

      1.5、原型模式(prototype pattern):该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。

    2、结构型模式(7种):

      2.1、适配器模式(Adapter pattern):将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

      2.2、装饰器模式(Decorator pattern):动态的为一个对象增加新的功能,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

      2.3、代理模式(Proxy pattern):代理模式就是多一个代理类出来,替原对象进行一些操作,实际操作的还是原来的对象。就像明星的经纪人一样,经纪人就是明星的代理。

      2.4、外观模式(Facade pattern):也叫门面模式,为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。 就像去公司面试或者拜访只需要找前台就行,前台就算是公司的一个门面。

      2.5、桥接模式(Bridge pattern):桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。

      2.6、组合模式(composite pattern):组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。

        组合模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。经典的例子就是部门树。

      2.7、享元模式(Flyweight Pattern):主要通过实现对象的共享来减少创建对象的数量,以减少内存占用和提高性能。如共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。

    3、行为型模式(11种):

      3.1、策略模式(strategy pattern):策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式把行为和环境分开。

         环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会 影响到环境和客户端。

      3.2、模板方法模式(Template pattern):模板方法模式预备一个抽象类,在该抽象类的方法中只实现部分逻辑,然后声明一些抽象方法来迫使子类实现剩余的逻辑。

        不同的子类可以以不同 的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类来实现。

      3.3、观察者模式(observer pattern):让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。

      3.4、迭代器模式(iterator pattern):迭代器模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。

         迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开。迭代器模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭 代子对象,每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。

      3.5、责任链模式(Chain of responsibility pattern):在 责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。

        客户并不知道链上的哪 一个对象终极处理这个请求,系统可以在不影响客户的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以终 极不被任何接收端对象所接受。

      3.6、命令模式(Command pattern):命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

          命令模式答应请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接 口,更不必知道请求是怎么被接收,以及操纵是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。

      3.7、备忘录模式(Memento pattern):保存一个对象的某个状态,以便在适当的时候恢复对象。

      3.8、状态模式(State pattern): 状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便 改变所选的子类。

      3.9、访问者模式(visitor pattern):访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操纵需要修改的话,接受这个操作的数据结构可以保持 不变。

          访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。访问者模式使得增 加新的操作变的很轻易,就是增加一个新的访问者类。

          访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。当使用访问者模式时, 要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。

          访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。

      3.10、中介者模式(Mediator pattern):也叫调停者模式,用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

      3.11、解释器模式(Interpreter pattern):定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。

           解释器 模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。

         在解释器模式中需 要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。

         命令对象的等级结构中的对象的 任何排列组合都是一个语言。

原文地址:https://www.cnblogs.com/kyleinjava/p/9719945.html

时间: 2024-11-18 14:31:17

面向对象开发中的七大设计原则和23种设计模式的相关文章

六种设计原则和23种设计模式

六大原则: 单一职责: 开闭原则: 迪米特原则: 里氏替换原则: 依赖倒置原则: 接口隔离原则 23种设计模式: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.

20 设计原则与23种设计模式

1 设计的六大原则 1.1开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.所以一句话概括就是:为了使程序的扩展性好,易于维护和升级.想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点. 1.2里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设

项目开发中自定义字段设计原则

在开发系统过程中,做到自定义字段策略设置,目前这种功能是很多系统的标准配置,这样子可以简化后续增加字段的难度,并对自定义字段做管理. 自定义字段功能要注意到以下几点: 1.批量规划好要自定义字段的数据表.2.对自定义字段存放的表字典表做设计3.对自定义字段做不同的属性设计4.自定义字段的扩展设计 1.明确是哪个表需要自定义字段.如果是开发一套易用的系统,做开发的时候对用到的主表做统一的自定义字段设计.这样子方便在以后的开发应用中直接操作自定义功能就能增加字段.很多程序员在初写程序的时候,增加字段

【游戏开发】浅谈游戏开发中常见的设计原则

俗话说得好:“设计模式,常读常新~”.的确,每读一遍设计模式都会有些新的体会和收获.马三不才,才读了两遍设计模式(还有一遍是在学校学的),属于菜鸟级别的.这次准备把阅读设计模式的想法记录下来,并且把设计模式应用在Unity游戏开发上,做些小案例. 什么是设计模式 每一种模式都在说明某种一再出现的问题,并描述解决方法的核心,之后让你能够举一反三,从而解决数个类似的问题.每一种设计模式除了按照“面向对象的设计原则”加以分析设计之外,还满足:”解决一再出现的问题“.”解决问题的方案和问题核心的关键点“

JAVA6中设计原则和23种设计模式

JAVA六大设计模式 1.单一职责规则(SRP):有且仅有一个原因引起类的变化. 2.依赖倒置规则(DIP): 1.高层模块不应该依赖底层模块,两者都用依赖接口: 2.接口不依赖细节: 3.细节依赖接口. 3.接口隔离规则:类间的依赖关系应该建立在最少的接口上. 4.里氏替换规则:所以引用基类的地方都能透明的使用子类对象. 5.迪米特法则:也叫最少知道原则.即一个对象应该对其他的对象有最少的了解. 6.开闭规则:对扩展开放,对修改关闭.

GOF 的23种JAVA常用设计模式总结 03 面向对象七大设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 各位代码界的大佬们总结出的七大设计原则,还是需要好好了解一下 1.开闭原则 开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作<面向对象软件构造>(Object Oriented Software Construction)中提出:软件实

面向对象的七大设计原则

面向对象七大设计原则 1.开闭原则(OCP:Open-Closed Principle) 2.里氏替换原则(LSP:Liskov Substitution Principle) 3.单一职责原则(SRP:Single responsibility principle) 4.接口隔离原则(ISP:Interface Segregation Principle) 5.依赖倒置原则(DIP:Dependence Inversion Principle) 6.迪米特法则(LOD:Law of Demet

零散知识点(面向对象七大设计原则,jdbc--BaseDao,jsp九大内置对象。四个作用域)

面向对象七大设计原则: 1.开闭原则(OCP:Open-Closed Principle)2.里氏替换原则(LSP:Liskov Substitution Principle) 3.单一职责原则(SRP:Single responsibility principle)4.接口隔离原则(ISP:Interface Segregation Principle)5.依赖倒置原则(DIP:Dependence Inversion Principle)6.迪米特法则(LOD:Law of Demeter)

[学习笔记]面向对象开发中的一些思想和原则

摘自<Java与模式>作者阎宏 面向对象的可复用设计的第一块基石:开闭原则(一个软件实体应当对扩展开放,对修改关闭) "开-闭"原则的手段和工具: 1)里氏代换原则:任何基类出现的地方,子类一定可以出现: 2)依赖倒转原则:要依赖于抽象,不要依赖于实现: 3)合成\聚合复用原则:要尽量使用合成\聚合,而不是继承关系达到复用的目的: 4)迪米特法则:一个软件实体应该与尽可能少的其它实体发生相互作用: 5)接口隔离原则:应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口