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

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

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

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

| 这个作业的目标 | 理解软件设计原则、设计模式 |

参考资料

《大话设计模式(pdf)》程杰

归纳总结

设计原则

开闭原则

1.一个软件实体如类、模块函数应该对扩展开放,对修改关闭。
2.强调用抽象构建框架,用实现扩展细节。生活中的实例(弹性工作制,每天必须工作满八小时这个是不能修改的,但是对于什么时候来什么时候走没有规定)。

依赖倒置原则

1.高层模块不应该依赖低层模块,两者都应该依赖其抽象。
2.抽象不应该依赖细节,细节应该依赖抽象。
3.每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块(一般是接口,抽象类),原子逻辑的组装就是高层模块。

单一职责原则

1.不要存在多于一个导致类变更的原因。
(若承担过多职责:1.一个职责的变化可能会影响、削弱或者抑制这个类实现其他职责的能力;
2.当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费;)

接口隔离原则

1.用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。
2.一个类对应一个类的依赖应该建立在最小的接口上。
3.建立单一接口,不要建立庞大臃肿的接口。
4.尽量细化接口,接口中的方法尽量少。
5.适度原则,一定要适度。

迪米特原则(最少知道原则)

1.一个对象对其他对象保持最少的了解,尽量降低类与类之间的耦合,强调只与相关类交流。
2.相关类指的是出现在成员变量、方法的输入、输出参数中的类。

里氏替换原则

1.子类可以扩展父类的功能,但不能改变父类原有的功能。即:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

合成复用原则

1.尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。

设计模式

创建模式(创建对象)

1.工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。
2.抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。属于对象创建型模式。
3.单例模式
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
4.建造者模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。
5.原型模式
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对象,无须知道任何创建的细节。

结构模式(处理类或对象的组合)

1.适配器模式
将一个类的接口转换成客户希望的另外一个接口。使得原本不相容的接口可以协同工作。
2.装饰器模式
动态地给一个对象添加一些额外的职责。提供了用子类扩展功能的一个灵活的替代,但比生成子类更为灵活。 装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。
3.代理模式
给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
4.外观模式
定义了一个高层接口,为子系统中的一组接口提供一个一致的界面,从而简化子系统的使用。
5.桥接模式
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
6.组合模式
将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。 组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象。
7.享元模式
提供支持大量细粒度对象共享的有效方法。面向对象技术可以很好地解决灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。

行为模式(描述类或对象怎样进行交互和怎样分配职责)

1.策略模式
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
2.模板方法模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
3.观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
4.迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
5.责任链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
6.命令模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。对命令进行封装,将发出命令的责任和执行命令的责任分割开。
7.备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
8.状态模式
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
9.访问者模式
表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
10.中介者模式
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
11.解释器模式
定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”意思是使用规定格式和语法的代码。

心得体会

本人参与设计的项目很少,但对于设计原则以及设计模式的运用稍有印象,但具体的模式使用并未理解透彻。
通过对软件设计原则以及设计模式的粗略学习,了解到设计模式实际上是对面向对象设计原则的实际运用,表明了对面向对象三大特性的充分理解。充分表示了类的封装性、继承性、多态性以及类与类之间的关联关系以及组合关系,且设计模式的运用可以提高程序员的思维模式、编程能力以及设计能力,使得程序标准化,代码编写工程化,也可提高代码重用性、可读性、可靠性、灵活性以及可维护性。而设计原则可作为设计标准,可用于指导设计的优劣,且基于设计原则进行设计会使得设计的思路更为清晰。但设计原则也只是基础,不可照搬,需要我们自己设计的过程中逐步积累,融会贯通。

编辑界面截图

posted @   一生一代一双人  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示