作业二:软件设计原则与设计模式

| 这个作业属于哪个课程 |班级的链接 |

| ----------------- |--------------- |

| 这个作业要求在哪里| 作业要求的链接|

| 这个作业的目标 | <了解软件设计原则与设计模式> |

设计模式七大原则:

里式替换原则LSP

所有引用基类的地方必须能透明地使用其子类的对象,也可以简单理解为任何基类可以出现的地方,子类一定可以出现。即子类对象必须能够替换掉所有父类对象。
继承是一种 IS-A 关系,子类需要能够当成父类来使用,并且需要比父类更特殊
如果不满足这个原则,那么各个子类的行为上就会有很大差异,增加继承体系的复杂度
意义:只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为

单一职责原则SRP

指一个类或者模块应该有且只有一个改变的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心就是解耦和增强内聚性。

接口隔离原则ISP

客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。简单来说就是建立单一的接口,不要建立臃肿庞大的接口。也就是接口尽量细化,同时接口中的方法尽量少。

依赖倒转原则DIP

程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

  • 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
  • 抽象不应该依赖于细节,细节应该依赖于抽象
    高层模块包含一个应用程序中重要的策略选择和业务模块,如果高层模块依赖于低层模块,那么低层模块的改动就会直接影响到高层模块,从而迫使高层模块也需要改动
    依赖于抽象意味着
  • 每个具体的类都应该有其接口或者基类,或者两者都具备。
  • 类中的引用对象应该是接口或者基类。
  • 任何具体类都不应该派生出子类。
  • 尽量不要覆写基类中的方法。

开闭原则OCP

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。模块应尽量在不修改原(是"原",指原来的代码)代码的情况下进行扩展。

  • 扩展就是添加新功能的意思,因此该原则要求在添加新功能时不需要修改代码
  • 符合开闭原则最典型的设计模式是装饰者模式,它可以动态地将责任附加到对象上,而不用去修改类的代码

迪米特法则LOD

一个对象应该对其他对象保持最少的了解,初衷在于降低类之间的耦合。
迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部对外除了提供的public 方法,不对外泄露任何信息

合成复用原则

尽量使用合成/聚合,而不是通过继承达到复用的目的。

设计模式:


创建型模式:用来处理对象的创建过程

单例模式:

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

工厂模式:

我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

抽象工厂模式:

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

建造者模式:

使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

结构性模式:用来处理类或者对象的的组合

设配器模式:

作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

桥接模式:

将抽象部分与实现部分分离,使它们都可以独立的变化。

代理模式:

为其他对象提供一种代理以控制对这个对象的访问。

装饰器模式:

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

行为型模式:用来对类或对象怎样交互和怎样分配职责进行描述

命令模式:

将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;将请求排队或记录请求日志,支持可撤销的操作。命令模式的根本目的在于将“请求者”与“实现者”之间解耦。

观察者模式:

观察者模式又称为发布/订阅模式,它是软件设计模式中的一种。观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

策略模式:

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

中介者模式:

用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

心得体会:

以我目前对设计模式的理解和实战中的使用,觉得设计模式是使程序具备高内聚低耦合的一种手段。当程序具备了这两种特定,在发生变更时,会使事情变得简单。在程序合适位置使用合适的设计模式,可以使得代码程序更加规范,维护,扩展等方面更容易进行

posted @ 2022-03-05 22:06  w_gs  阅读(72)  评论(0)    收藏  举报