面向对象设计模式的核心规则

面向对象设计模式的核心规则
1。单一职责

就一个类而言,应该只有一个原因导致它改变。
如果一个类承担太多的责任,就等于将这些责任耦合起来。职责的改变可能削弱或抑制这个类履行其他职责的能力。这种耦合可能导致脆弱的设计,而当发生变化时,设计将意外中断。
很多软件设计真正需要做的是找到责任和分离责任。如果你有不止一个动机去改变一个类,那么这个类有不止一个责任。

2。开闭

软件实体(类、模块、函数等)应该扩展,但不能修改,也就是说,扩展是开放的,而更改是关闭的。
在这种设计中,需求的变化可以保持相对稳定,因此系统可以在第一个版本之后继续发布新版本。
无论模块是多么的接近,有一些变化,不能关闭,因为它是不可能是完全封闭的,设计者必须选择改变应该关闭的模块,模块,他设计的。他必须先猜出那是最有可能发生变化的类型,然后构造抽象来隔离变化。
发生变化时立即采取行动。

当我们最初编写代码时,假定更改不会发生。当发生更改时,我们创建一个抽象来隔离更改后发生的类似更改。
面对需求,程序的更改是通过添加新代码而不是更改现有代码来完成的。
我们想要的是尽快了解开发工作中可能发生的变化,等待发现可能变化的时间越长,建立正确的抽象就越困难。
开闭原则是面向对象设计的核心。这一原则所能带来的巨大效益,面向对象的技术要求,即维护、可扩展、可复用、灵活。开发商应该只在程序上常出现的部分,但它不是一个好主意的摘要应用程序的每个部分。它是拒绝不成熟的抽象和抽象本身一样重要。

三.依赖倒转

高级模块不应该依赖于底层模块,这两个模块都应该依赖于抽象。
抽象不应该依赖细节,细节应该依赖于抽象。
抽象不应该依赖于细节,细节应该依赖于抽象,接口编程,而不是编程。
事实上,依赖倒转可以说是面向对象设计的标志,用哪种语言写的程序是不重要的,如果写的是考虑如何抽象编程而不是编程的细节,即所有依赖过程是抽象类或接口,面向对象设计的终止,这是设计过程。

4。李希特替代

如果一个软件实体使用父类,它必须适用于它的子类,并且不能检测父对象和子类对象之间的差异。换句话说,在软件中,父类被替换为它的子类,程序的行为没有改变。
子类型必须能够替换其父类型。
只有当类可以替换父类时,父类才能真正重用时,软件单元的功能不会受到影响,子类也可以基于父类添加新的行为。

5。合成/聚合再利用

尽量使用合成/聚合,尽量不要使用类继承。
对象合成/聚合的优先使用将帮助您保持每类封装和集中在一个单一的任务,因此,继承层次的类将保持较小的规模,是不可能成长为一个imcontrollable怪物。

6。德米特里定律

如果这两个类不需要直接进行通信,那么这两个类就不应该有直接的交互。如果其中一个类需要调用其他类中的一个,则调用可以由第三个类转发。
在类结构的设计中,每个类都应尽量减少成员的访问权限。也就是说,一个班wrappes自己私有的状态,所以不需要让其他班知道的领域或行为。
德米特里定律的基本思想是强调类之间的松散耦合。

类之间的耦合越弱,重用的好处就越大,而弱耦合类被修改,不会引起相关类的波纹。

辅助信息:

常见的创意设计模式(其他类型的模式不提,阅读自己的书籍)

创建模式隐藏了如何将这些类的实例创建并放在一起。整个系统对这些对象的了解是抽象类定义的接口,这样,创建模式在创建什么、创建它、创建它以及创建它时提供了很大的灵活性。

1。工厂方法模型(工厂方法)

定义用于创建对象的接口,允许子类决定实例化哪个类,工厂模式将类的实例化延迟到子类。
创新模式抽象了实例化的过程,这有助于一个独立的对象创建,系统结合起来,并表示,创建模式将封装什么具体类的系统使用的信息。它允许客户端配置是不同的结构和功能的一个大型的产品对象的系统配置可以是静态的,即在编译时,或动态,然后在运行时指定。
通常,设计应该从工厂方法开始,当设计师发现需要更多的灵活性时,设计将演变成其他的创造性模式。当设计师在设计标准之间权衡时,理解多种创作模式可以给设计师更多的选择余地。

2。抽象工厂模型(抽象工厂)

提供一个接口来创建一系列或相关的依赖对象,而不指定它们的特定类。

三.生成器模型(生成器)

复杂对象的构造与它的表示分离,从而相同的构造过程可以创建不同的表示。
内聚和耦合内聚性描述常规的内部组件之间的关联的密切程度,耦合了程序和其他程序之间联系的密切程度。软件开发的目标应该是建立这样的程序:内部的完整性,即高的凝聚力,以及与其他程序连接紧凑,直接,可见柔性,这是松耦合。
将复杂对象的结构与表示分离开来可以很容易地改变产品的内部表示,并将构建代码与表示代码分开,因此,对于客户来说,它不需要关心产品创建过程。只要告诉我需要什么,我就能用同样的建筑过程为客户创造不同的产品。

4。原型模型(原型)

原型的实例用于设置创建对象的类型,并通过复制这些原型创建新对象。
通常,创建原型和使用依赖的数字克隆它们比在每次使用合适的状态时手动实例化类通常更为方便。

5。single case model (Singleton)

确保一个类只有一个实例,并提供一个全局访问点来访问它。
对于某些类,实例是非常重要的。一个全局变量可以允许一个对象被访问,但它并不能防止客户端实例化多个对象。一个单例的优点是类本身负责保存它的唯一实例。这类可以确保没有其他实例可以被创建,并一个简单的例子提供了一种方法来访问实例。这允许的唯一实例严格控制如何以及何时将访问客户。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部